C#从Form1中的静态方法获取现有Form1实例
我知道这个问题很简单,但没有人能给出简单的答案 从Form1中的静态方法获取现有Form1实例C#从Form1中的静态方法获取现有Form1实例,c#,oop,instance,static-methods,C#,Oop,Instance,Static Methods,我知道这个问题很简单,但没有人能给出简单的答案 从Form1中的静态方法获取现有Form1实例 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { callMethod(); }
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";
}
}
请注意,我为什么需要它并不重要,但重要的是知道如何使用。您可以将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";
}
关键字“
this
”返回对包含它的类的当前实例的引用
静态方法(或任何静态成员)不属于特定实例。它们的存在没有创建类的实例
除非将任何成员设置为静态,否则无法真正访问它们。在您的情况下,假设statusLabel
是textbox,它将不允许您通过静态方法访问它
要么使你的函数非静态,要么你可以使用下面的代码
callMethod(statusLabel);
public static void callMethod(Label txt)
{
txt.Text = "test";
}
你可以这样做,尽管我仍然建议为你需要的值分离或创建一个模型,并传递给大家。请参阅.net的消息概念
public static Form1 Instance
{
get
{
return instance;
}
}
并将其添加到构造函数中
private static Form1 instance;
public Form1()
{
instance = this;
InitializeComponent();
}
如何从静态方法调用Form1.callMethod(this)?“this”在静态属性中无效。如果在Form1实例中调用它,则可以这样调用它,例如:在它的一个成员函数上(非静态)。我以前不知道您打算从另一个静态方法调用Form1.callMethod()。我已经编辑添加了在您无法直接访问实例时使用Singleton模式的替代方案。谢谢,但Singleton将检查现有实例,如果不存在,则将实例化该类,要使用现有实例,我需要使用“this”,但正如我在前面的注释“this”中所述在静态属性yyes中无效,我从来没有打算将此用作静态属性。它是一个引用当前实例的关键字,因此如果在实例中使用它,则它具有有效值,例如:在成员(非静态)函数中。正如我所说,之前我认为您将在Form1实例中调用它。我应该先澄清一下。状态标签是什么?是静态的吗?@Sangram,不,不是静态的。@Sever这是为了什么?这似乎大错特错,真的!“this”在静态属性中无效