首页 新闻 赞助 找找看

窗体继承扩展接口的问题,请高手帮忙

0
悬赏园豆:100 [已解决问题] 解决于 2011-10-15 23:30

我自定义一个接口

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方法。

Sicket的主页 Sicket | 初学一级 | 园豆:2
提问于:2011-10-15 11:13
< >
分享
最佳答案
0

我试了可以,不知道你是怎么写的。

接口:

    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());
}
}
收获园豆:100
五行缺木 | 菜鸟二级 |园豆:386 | 2011-10-15 14:20

原来GetControl实现有问题  return this.Controls[ctrlName]; 只能得到窗体的直接子控件! 倒是我糊涂了!

 

Sicket | 园豆:2 (初学一级) | 2011-10-15 23:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册