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

  • 本文关键字:表单 函数 调用 Main c#
  • 更新时间 :
  • 英文 :


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

我有一个主窗体

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

我想从Main()打电话给activateButton()

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

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

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

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

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

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

MainForm myForm = new MainForm();

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

最新更新