繁体   English   中英

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

[英]What is wrong with my code? (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;
        }
    }

我收到此错误:

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

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

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

MyProgram main = new MyProgram();
main.Form1.FormClosing += new FormClosingEventHandler(main.Form1_Closing);
main.Form1.Show();

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

static Form Form1 = new Form();

private static void Form1_Closing(...)

您需要将Form Form1 = new Form ()放入main。

基本上,您尝试在静态上下文中使用非静态属性。 从Main的静态上下文中调用FormClosing就是问题所在。

请在Microsoft页面上阅读有关此错误的更多信息

错误消息指出, Form1字段和Form1_Closing方法与MyProgram类的实例绑定,而不是与类本身绑定。 您可以将它们设置为静态以解决问题:

 static Form Form1 = new Form();

 static void Form1_Closing(object sender, CancelEventArgs e) { ... }

或者,在main方法中创建一个实例:

// really bad code; only a demonstration
var myProgram = new MyProgram();
myProgram.Form1.FormClosing += myProgram.Form1_Closing;
myProgram.Form1.Show();       

当然,有没有需要任何的这个,因为你似乎没有使用该领域其他地方-你可以只让一个局部变量来代替。

var form = new Form();
form.FormClosing += Form1_Closing; // make Form1_Closing a static method
form.Show();

您还可以选择将琐碎的事件处理程序方法编写为lambda:

form.FormClosing += (sender, e) => e.Cancel = true;

我假设因为您正尝试从静态函数访问成员变量,所以成员变量本身必须是静态的。

您在这里遇到几个问题。 主要的问题是您试图在控制台应用程序中显示一个Form,但是注定会失败。 要具有用户界面,您需要一个正在处理Windows消息的用户界面线程。 我建议您使用Visual Studio模板创建一个新的空白WinForms应用程序,该应用程序将向您展示创建显示的起始Form的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM