我在Winforms应用程序中使用DockPanel Suite。 DockContent类是从System.Windows.Forms.Form类派生的,而我的两个窗体dockRounds和dockToolbox都是从DockContent类继承的。
这是我第一次这样做,这可能是一个愚蠢的问题,但是在运行时,如何访问ockRounds和dockToolbox窗体的控件?
以下是我在应用首次运行时如何加载两种形式的信息:public partial class frmMainNew : Form
ojit_pre
提前谢谢了
台灯
最佳答案
您可以使用多种策略来实现不同窗体上的对象之间的通信/链接。注意:我在这里的答复不会解决与DockPanelSuite特别相关的任何问题,也不会考虑“辅助”表单是“独立”(即它们不是MainForm所“拥有”)还是被制作MainForm的子窗体。这是一个有意识的选择,它是基于您所要求的内容独立于实现中的那些可能变化而做出的。
最简单的策略(如果繁琐的控件繁琐)是在辅助窗体中声明“公共属性”,以公开要从主窗体中操作的控件。例如,假设Form2有一个按钮,而您想在主窗体上处理其click事件:
在Form2中定义一个属性,如:
public Button form2Button
{
get { return button1; }
}
现在,在您的主窗体的Load事件中,假设在此处创建Form2的实例,您可以在Form2上订阅Button的Click事件:
Form2 myForm2;
Form3 myForm3;
private void Form1_Load(object sender, EventArgs e)
{
myForm2 = new Form2();
myForm2.form2Button.Click += new EventHandler(form2Button_Click);
myForm3 = new Form3();
}
您可以轻松地想象到,在Form3中,您拥有一个用公共属性公开的TextBox,就像在Form2上公开Button一样。
因此,您可以在Form2上的Button单击中实现MainForm的事件处理程序,如下所示:
public void form2Button_Click(object sender, EventArgs e)
{
// do something here with the TextBox on Form3
// myForm3.theTextBox.Text =
}
...其他策略...
例如,在您的辅助表单中,按一下按钮可以引发一个公共事件,主表单(或暴露给Form2的任何其他实体)可以订阅该公共事件,然后将适当的内容分发给适当的目标。
您通常可以在更高级别上将消息传递抽象到单个(也许是静态的)类中,在该类中,发布者发送消息,然后将消息分发给已注册的侦听器。
最后,您可能对这里的讨论感兴趣:
Using The Controls Of One Form Into Another
最好,
关于c# - 如何访问继承表单上的控件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1750074/