C#从Form1中的静态方法获取现有的Form1实例

时间:2013-12-12 05:58:59

标签: 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 static void callMethod()
    {
       // how can get existing Form1 instance here ?             
       statusLabel.Text = "test";
    }
}

请,为什么我需要这个并不重要,但知道如何重要。

3 个答案:

答案 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";

}