C# 关于win apps c中sdi窗口的基本表单#
我有一个MDI表单和几个SDI表单。现在,我将为所有sdi表单创建一个基本表单,并编写一个函数来启用和禁用sdi表单上的控件,但我不会从子sdi表单显式调用该函数。基本上,我的所有sdi都将扩展该基本形式。所以,请告诉我,在sdi表单的构造函数调用完成后,是否有任何方法可以自动调用基表单中的特定函数 另一个问题是,我是否可以从基本窗体访问子窗体或sdi窗体的控件,从而启用和禁用它。所以请告诉2种方法,一种是自动调用基窗体的函数,以及如何编写代码,因为从sdi我不会像base.funcname()那样显式调用该函数,另一种是如何从基窗体访问sdi窗体上的控件 谢谢您“听起来像”试图让子SDI表单与父基表单对话,在这种情况下,请尝试使用事件: 在子SDI表格中:C# 关于win apps c中sdi窗口的基本表单#,c#,C#,我有一个MDI表单和几个SDI表单。现在,我将为所有sdi表单创建一个基本表单,并编写一个函数来启用和禁用sdi表单上的控件,但我不会从子sdi表单显式调用该函数。基本上,我的所有sdi都将扩展该基本形式。所以,请告诉我,在sdi表单的构造函数调用完成后,是否有任何方法可以自动调用基表单中的特定函数 另一个问题是,我是否可以从基本窗体访问子窗体或sdi窗体的控件,从而启用和禁用它。所以请告诉2种方法,一种是自动调用基窗体的函数,以及如何编写代码,因为从sdi我不会像base.funcname()
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();
}
}
在派生构造函数执行之后,如果不显式调用它,就不能让基类中的某些内容执行,因此可能仅限于此方法
对于第二个问题,您始终可以访问基本表单上的控件
集合,因为它是表单对象的一部分