我自定义一个接口
public interface IMForm
{
Control GetControl(string ctrlName);
}
用于返回窗体控件
父窗体
public partial class MForm : Form, IMForm
并实现接口方法GetControl
之后在设计中所有的窗体继承自MForm窗体,如
public partial class MdiForm : MForm
现在有一个问题,我将MdiForm窗体转化为IMForm接口类型后 通过方法GetControl无法得到MdiForm窗体上的控件,只能得到MForm上的控件;接口的实现部分在MForm中!!
该如何在被继承者中得到继承者的对象?
如果将接口实现部分都写在MdiForm窗体中的话,这样设计起来麻烦,每个窗体都要实现GetControl方法。
我试了可以,不知道你是怎么写的。
接口:
public interface IMForm
{
Control GetControl(string ctrlName);
}
Form1实现接口
public partial class Form1 : Form, IMForm
{
public Form1()
{
InitializeComponent();
}
public Control GetControl(string ctrlName)
{
Control theControl = new Control();
foreach (Control c in this.Controls)
{
if (c.Name.ToString() == ctrlName)
return c;
}
return theControl;
}
}
Form2继承Form1
public partial class Form2 : Form1
{
public Form2()
{
InitializeComponent();
}
}
测试:button2在Form1或Form2中都行。
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
IMForm frm = new Form2();
Control theControl = frm.GetControl("button2");
MessageBox.Show(theControl.Text.ToString());
}
}
原来GetControl实现有问题 return this.Controls[ctrlName]; 只能得到窗体的直接子控件! 倒是我糊涂了!