[英]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.