【问题标题】:How call Method in UserControl from a different form如何从不同的表单调用 UserControl 中的方法
【发布时间】:2020-08-03 22:45:21
【问题描述】:

我正在尝试通过从不同的表单 (FrmOpenShop) 调用用户控件中的方法 (Reload_Dash) 来重新填充用户控件 (DashboardCTR) 上的 GridView,而不创建用户控件的新实例。

当使用这样的表单时,我完成了同样的任务:

foreach(Form appForm in Application.OpenForms)
{
     if(appForm.Name=="formName")
     {
          (Application.OpenForms["formName"] as formName).MethodName;
     }
}

但对于 Usercontrol,我不是如何完成此操作的用户,我希望我可以通过遵循上述方法来获得它,如下所示:

foreach(UserControl control in Application.OpenForms)
{
     if(control.Name=="DashboardCTR")
     {
          (Application.OpenForms["DashboardCTR"] as DashboardCTR).Reload_Dash;
     }
}

但这不起作用,一些想法会有所帮助。

谢谢。

【问题讨论】:

  • UserControl 不是放在表单上吗? formInstance.UserControlName.MethodName() 有什么问题?您只需确保将 UserControl 访问修饰符设置为 internalpublic
  • 您通过使用Application.OpenForms 采取了正确的方法来完成此任务。不要用那个。相反,将 REFERENCE 从一种形式传递到另一种形式并使用它。一种简单的方法是简单地调用Show(),但传入“this”Show(this)。然后显示的表单可以将.Owner 属性转换为正确的表单类型并使用它...

标签: c# winforms user-controls


【解决方案1】:

组件/控件的Modifiers 属性令人讨厌地在创建时默认为private,或者如果不是这种情况,请尝试添加这些保护修饰符:publicstatic,public 优先于 static。

如果使用构造函数,public modifier 使用户可以使用该方法。

static modifier 强制该方法仅在没有使用构造函数的情况下提及类型时才可用。这允许您在UserControl 网格视图或其他任何内容上强制重新加载/重绘。允许您随时刷新

【讨论】:

  • 这绝对不是静态的。仅仅将事情公开和/或静态是一种糟糕的设计和大量的错误。
猜你喜欢
  • 2021-07-26
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多