我的代码出了什么问题?(C#Winforms)

yon*_*236 2 c# winforms

我的代码有什么问题吗?

using System;
using System.Windows.Forms;

    public class MyProgram 
    { 
        Form Form1 = new Form();

        public static void Main(string[] args) 
        {      
            Form1.FormClosing += new System.Windows.Forms.FormClosingEventHandler(Form1_Closing);
            Form1 .Show();        
        } 

        private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
             e.Cancel = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

错误ID:CS0120,错误:非静态字段,方法或属性'MyProgram.Form1_Closing(object,System.ComponentModel.CancelEventArgs)',行:10,列:30错误ID:CS0120,需要对象引用,错误:非静态字段,方法或属性需要对象引用

Bol*_*ock 6

您的Form实例变量无法访问主类的Form1_Closing()回调,因为它是一个实例方法,但您在静态上下文(您的Main()方法)中添加了事件处理程序.

您必须使用实例添加该事件处理程序MyProgram,而不是通过该Main()方法:

MyProgram main = new MyProgram();
main.Form1.FormClosing += new FormClosingEventHandler(main.Form1_Closing);
main.Form1.Show();
Run Code Online (Sandbox Code Playgroud)

或者将您的Form字段声明为静态字段,并将Form1_Closing()事件处理程序声明为静态方法,以便Main()可以使用它们:

static Form Form1 = new Form();

private static void Form1_Closing(...)
Run Code Online (Sandbox Code Playgroud)