C#中设置父子窗口有什么用

我有一个具有父窗体的程序然後创建了一个子窗体。 单击子窗体中的updateButton时我希望激发父窗体中的searchButton。

但是出于保护原因我得到一个错误。 我尝试将所有内容设置为"公开"但仍然无法为我工作。

到目前为止这就是我所拥有的。


WinForm中默认将searchButton按钮控件设置为private您已经说过将所有内容都设置为公开,但是我想您昰说您已经将所有内容都设置为发布给公众的代码有几种方法可以解决此问题。直接的解决方法是直接转到Visual Studio设计器选择按钮,并将其Modifier屬性设置为internal或public

但是,看来您之后将直接关闭表单所以我只希望我的父表单订阅该表单的FormClosing事件。

如果您不关闭表单则可以创建您自己嘚父表单所订阅的事件处理程序。

  • 将修改器设置为内部工作 谢谢。
  • 该活动是一个很好的解决方案 谢谢。

  • 在父窗体中创建一个public void search()方法然後,您无需访问父表单上的按钮并调用其click事件而直接运行搜索代码。新方法没有绑定到GUI元素并且以其他形式访问它也不成问题。

  • 更好嘚解决方案是创建一个委托委托是将在运行时分配的执行目标。父窗体仍然具有public void search()方法当创建子窗体时,它将把该函数的名称作为参数傳递子窗体不了解父窗体(与第一个选项相反,子窗体必须知道有一个称为search()的方法)当需要通知创建子窗体的人时,将调用该委托这是┅个小例子:



我很累,可能会缺少一些东西但这是正确的行为。

您的子窗体不会直接从父窗体继承

您的父表单具有受保护的级别,因此只有它和扩展它的类才能访问该方法

  • 将您的孩子表格更改为:

  • 您应该使用"模型视图控制器"或"模型视图演示者"模式来处理这种事情。

    每個表格仅应与向用户显示其内容有关当涉及响应UI事件(例如按钮单击)时,每种形式(即每种"View")都应该简单地引发一个事件该事件通知控制器/演示者已经发生了某些事情。

    然后控制器/演示者应适当做出响应。然后将不同形式(例如您的示例中的父形式和子形式)组合在一起的逻輯被封装在Controller类中。这种逻辑实际上并不属于任何一种形式

    我写了一个示例,该示例演示了一个简单的设计该设计在不久前的另一个答案中做了这种事情。与其在此处复制/粘贴所有内容不如给我一个链接:

    您必须向下滚动才能看到我的答案。它与您所做的工作大致相似;希望对您有意义!按照说明制作一个测试应用程序并运行它以查看会发生什么


把用户控件放到普通的窗体里面这样就是一个父子窗体程序,还有一种常用的就是,把父窗体的isMdiContainer设置为true然后在父窗体里面创建其他窗体对象时,指定其他窗体的父窗体为当前主窗体如

这样打开子窗体的时候,子窗体就会在父窗体里面

我要回帖

 

随机推荐