我知道这个问题非常简单,但没有人可以给出简单的答案。
从Form1
中的静态方法获取现有的Form1实例public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
callMethod();
}
public static void callMethod()
{
// how can get existing Form1 instance here ?
statusLabel.Text = "test";
}
}
请,为什么我需要这个并不重要,但知道如何重要。
答案 0 :(得分:4)
你可以这样做,虽然我仍然建议分离或创建你需要的值的模型并传递它。请参阅.net
的消息概念public static Form1 Instance
{
get
{
return instance;
}
}
并将其添加到构造函数
private static Form1 instance;
public Form1()
{
instance = this;
InitializeComponent();
}
答案 1 :(得分:0)
关键字“this
”返回对包含它的类的当前实例的引用。
静态方法(或任何静态成员)不属于特定实例。它们存在而不创建类的实例。
除非您将其设为静态,否则无法真正访问任何成员。在您的情况下假设statusLabel
是文本框,它将不允许您在静态方法中访问它。
要么使你的功能非静态,要么你可以使用类似下面的代码。
callMethod(statusLabel);
public static void callMethod(Label txt)
{
txt.Text = "test";
}
答案 2 :(得分:-1)
您可以将Form1作为参数传递给callMethod
public static void callMethod(Form form1)
{
form1.doSomething(); //use Form1 instance
statusLabel.Text = "test";
}
您可以将Form1实例传递给它。例如,如果从Form1中调用,则可以在下面调用它,例如:在其中一个成员函数上:
Form1.callMethod(this);
但是如果你想在不保存Form1实例的地方调用它,因此不能将它作为参数传递,你可以尝试使用Singleton模式,所以你可以在下面编写代码:
public static void callMethod()
{
Form1.instance().doSomething(); //use Form1 instance
statusLabel.Text = "test";
}