0

如果这看起来微不足道,我深表歉意,但我似乎无法理解这一点。这里的其他问题略有不同,所以这是我的问题:

我有一个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()看不到 public 方法myForm

4

3 回答 3

3

变量myForm的类型为Form。如果您将其声明为MainForm您将能够访问您的方法:

MainForm myForm = new MainForm();
myForm.activateButton() // No error.
于 2012-10-08T01:38:00.367 回答
2

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

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

于 2012-10-08T02:19:01.760 回答
1
MainForm myForm = new MainForm();

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

于 2012-10-08T01:38:06.583 回答