我在从一个子表单触发各种父表单中的方法时遇到问题。此子表单用于获取用户输入并将其传递给父表单。由于这种输入对于各种类型的工作是相同的(每种类型都以它自己的形式实现),我从各种形式称这种子形式。
到目前为止,我已经解决了这个问题:
在儿童形式中有一段代码:
private void button3_Click(object sender, EventArgs e)
{
if (Parent.GetType() == typeof(MyType))
{
if ((Parent as MyType).MyFunction()))
{
this.Close();
}
}
}
Parent是object类型的属性。使用以下代码从父表单调用此子表单:
MyChildForm IPU = new MyChildForm();
IPU.Parent = this;
IPU.ShowDialog();
这种方法的问题在于我最终会得到数十个if-else块,每个类型的父表单需要一个这种子表单用于输入。我的问题是 - 有没有办法缩短这段代码,以便它适用于每个具有名为MyFunction的函数的类型?
我尝试过这样的事情:
(Parent as typeof(Parent.GetType())).MyFunction()
但是我得到一个错误'Parent是一个属性但是被用作类型'
答案 0 :(得分:2)
您可以创建界面
public interface IParent
{
bool MyFunction();
}
并设置Parent
类型的IParent
属性。然后让您的父表单实现此接口。用法如下:
private void button3_Click(object sender, EventArgs e)
{
if (Parent.MyFunction())
this.Close();
}