C#替代(Application.OpenForms [0]为Form1)

时间:2014-02-04 22:08:07

标签: c# forms

是否有更好的替代以下代码在已打开的表单中调用方法?

(Application.OpenForms[0] as Form1).someMethod();

这行代码当然是在一个类中执行的。

更清楚这里是一个例子:

表格代码:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public void someMethod()
        {
            //do stuff
        }
    }

班级代码:

class Class1
{
    public void aMethod()
    {
        (Application.OpenForms[0] as Form1).someMethod();
    }
}

有没有更好的方法来调用someMethod?

2 个答案:

答案 0 :(得分:1)

如果您的Class1实例尚未引用Form1实例,则没有其他方法。这引出了几个问题。

首先,如果该Class1对象需要直接影响该Form1实例,那么它为什么不具有该引用呢? Class1对象来自哪里?很可能Form1实例创建了它。如果是这样,为什么Form1在创建时没有将引用传递给Class1对象?

其次,为什么Class1对象无论如何直接影响Form1实例?很可能更好的设计是Class1对象引发Form1可以处理然后影响自身的事件。

答案 1 :(得分:0)

您可以随时向Class1提供表单实例。