【问题标题】:Modifying a non-static object from a static method从静态方法修改非静态对象
【发布时间】:2009-07-13 06:13:03
【问题描述】:

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

我正在使用两种表单 - 我们称它们为 form_main 和 form_preferences

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

这就是我正在做的事情: form_main中的按钮被点击

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

//到目前为止一切顺利

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

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

【问题讨论】:

  • 我不明白你为什么创建一个静态方法,而不是一个实例来调用?

标签: forms static methods non-static


【解决方案1】:

将 form_main 方法更改为实例方法而不是静态方法。在创建它时将 form_main 的实例传递给您的 sub_form,以便它保留引用。

【讨论】:

  • 我试过这个,但是 frm_main.Enabled = true 在我创建第二个表单时传递的 main_form 上没有做任何事情。公共部分类 frmsettings : Form { Form frm_main;公共 frmsettings(Form frmparent) { InitializeComponent(); frm_main = frmparent; } private void cmdsave_settings_Click(object sender, EventArgs e) { frm_main.Enabled = true; this.Close(); }
  • 不知道不保留格式。基本上在我的公共类中,我有一个 public sub_form(Form frmparent){} ,它在类中设置了一个与传入的变量相等的全局变量。后来当它被调用时,它似乎对父表单没有影响。我在这里错过了什么吗?
  • 好的,所以 frm_main.Enabled = true;不起作用,但是 frm_main.Close();出于某种原因....
  • 没关系,我是个白痴,它有效。我禁用了另一个对象而不是表单。感谢您的帮助!
【解决方案2】:

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

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

public static class Program {

  public static YourFrom form = null;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多