我在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/

10-13 07:08