从静态方法修改非静态对象

时间:2009-07-13 06:13:04

标签: forms static methods non-static

我先告诉你我要做什么,然后我是怎么做的。如果有更好的方法,请告诉我。

我正在处理两种形式 - 让我们称之为form_main和form_preferences

当form_preferences表单启动时,我希望在单击form_preferences上的按钮(保存按钮)之前禁用form_main。

所以这就是我在做的事情: 在form_main中单击按钮

form_preferences frm_p = new form_preferences();
frm_p.Visible = true;
this.enabled = false;

//到目前为止一切顺利

当我在form_preferences上点击save时,它会调用form_main中的一个公共静态方法,该方法需要再次启用该表单。不幸的是我无法直接这样做,因为它是一种静态方法。

我尝试创建一个新的表单实例,但后来我必须创建新的实例并销毁原来的实例,这似乎是一个很大的浪费和低效。有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

将form_main方法更改为实例方法而不是静态方法。在创建时将form_main的实例传递给你的sub_form,因此它保留了一个引用。

答案 1 :(得分:0)

如果主表单只有一个副本,那么将表单设为单例或在程序中使用静态引用从静态方法中访问它。

在您的主要方法中,请执行以下操作...

public static class Program {

  public static YourFrom form = null;

  public static void Main(string args[]) {
    Program.form = new YourFrom();
    Application.Run(form);   
  }
}

每当您需要访问类中的表单对象时,请使用Program.form对象来访问它。