C# 关于win apps c中sdi窗口的基本表单#

C# 关于win apps c中sdi窗口的基本表单#,c#,C#,我有一个MDI表单和几个SDI表单。现在,我将为所有sdi表单创建一个基本表单,并编写一个函数来启用和禁用sdi表单上的控件,但我不会从子sdi表单显式调用该函数。基本上,我的所有sdi都将扩展该基本形式。所以,请告诉我,在sdi表单的构造函数调用完成后,是否有任何方法可以自动调用基表单中的特定函数 另一个问题是,我是否可以从基本窗体访问子窗体或sdi窗体的控件,从而启用和禁用它。所以请告诉2种方法,一种是自动调用基窗体的函数,以及如何编写代码,因为从sdi我不会像base.funcname()

我有一个MDI表单和几个SDI表单。现在,我将为所有sdi表单创建一个基本表单,并编写一个函数来启用和禁用sdi表单上的控件,但我不会从子sdi表单显式调用该函数。基本上,我的所有sdi都将扩展该基本形式。所以,请告诉我,在sdi表单的构造函数调用完成后,是否有任何方法可以自动调用基表单中的特定函数

另一个问题是,我是否可以从基本窗体访问子窗体或sdi窗体的控件,从而启用和禁用它。所以请告诉2种方法,一种是自动调用基窗体的函数,以及如何编写代码,因为从sdi我不会像base.funcname()那样显式调用该函数,另一种是如何从基窗体访问sdi窗体上的控件

谢谢

您“听起来像”试图让子SDI表单与父基表单对话,在这种情况下,请尝试使用事件:

在子SDI表格中:

public partial class ChildForm : Form
{
  public delegate void DisableBaseHandler(object sender, EventArgs e);
  public event DisableBaseHandler DisableBase;

  public ChildForm()
  {
    InitializeComponent();
  }

  private void Form2_Load(object sender, EventArgs e)
  {
    OnDisableBase();
  }

  private void OnDisableBase()
  {
    if (DisableBase != null)
      DisableBase(this, new EventArgs());
  }
}
在父基形式中:

public partial class BaseForm : Form
{
  private ChildForm _OtherForm;

  public BaseForm()
  {
    InitializeComponent();
  }

  private void button1_Click(object sender, EventArgs e)
  {
    if (_OtherForm == null || _OtherForm.IsDisposed)
    {
      _OtherForm = new ChildForm();
      _OtherForm.DisableBase += new ChildForm.DisableBaseHandler(DisableMe);
    }
    _OtherForm.Show();
  }

  private void DisableMe(object sender, EventArgs e)
  {
    //Disable Base Controls...
    button1.Enabled = false;
  }
}

在dervied类的构造函数中,可以调用基类上的方法

public class MyBaseForm : Form
{
    protected void SomeIntitializationMethod() {...}
}

public class MyDerivedForm : MyBaseForm
{

    public MyDerivedForm()
    {
        base.SomeInitializationMethod();
    }
}
在派生构造函数执行之后,如果不显式调用它,就不能让基类中的某些内容执行,因此可能仅限于此方法

对于第二个问题,您始终可以访问基本表单上的
控件
集合,因为它是表单对象的一部分