无法在Main()中调用表单的公共函数?

时间:2012-10-08 01:34:26

标签: c#

如果这看似微不足道,我道歉但我似乎无法抓住这一点。这里的其他问题略有不同,所以这是我的问题:

我有 MainForm

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }
    public void activateButton()
    {
        button1.PerformClick();
    }
//........

我想从activateButton()致电Main()

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Form myForm = new MainForm();
    Application.Run(myForm);
    myForm.activateButton() // error
}

为什么不能从activateButton()看到公共方法myForm

3 个答案:

答案 0 :(得分:3)

变量myForm的类型为Form。如果您将其声明为MainForm,则可以访问您的方法:

MainForm myForm = new MainForm();
myForm.activateButton() // No error.

答案 1 :(得分:2)

正如其他评论者指出的那样,由于您的变量属于Form而不是MainForm,因此会出现错误。但还有另一个问题。一旦调用Application.Run(窗体),应用程序就进入了主消息泵循环。这本质上是一个无限的while()循环,它只检查用户输入并处理Windows消息调度(你可以通过覆盖表单的WndProc方法来挂钩)。因此,在关闭表单之前,不会调用Main之后的任何代码。

如果您在表单打开后尝试调用activateButton()方法,请尝试在表单的构造函数中调用它,或者更好的方法是重写OnLoad()并在那里调用它。

答案 2 :(得分:1)

MainForm myForm = new MainForm();

在原始代码中,编译时类型为Form,因此activateButton不可见。