从菜单条激活某些内容不起作用

时间:2014-07-04 17:27:45

标签: c# winforms menustrip

我在Form1上有一个按钮默认启动。我有一个ConfigureForm,我有一个菜单条,可以选择启用Form1中的按钮。

所以我的代码是:

    private void Portal2HammerButtonEnable_Click(object sender, EventArgs e)
    {
        Form1 frm1 = new Form1();
        frm1.Portal2HammerButton.Enabled = true;
    }

但当我关闭ConfigureForm并查看按钮时,它仍处于停用状态。

2 个答案:

答案 0 :(得分:2)

您只需点击此按钮即可创建新表单。您想要的是对Form1的实际实例的有效引用。

您有一些选择:

  1. 如果其中一种形式是" main"然后,您可以确保首先创建它,从而创建另一个" sub"形式。你可以覆盖任何子表单的构造函数,以包含对你的" main"的引用。形式。
  2. 您可以在公共静态类中保留对所有重要表单的引用,以便所有表单都可以访问这些引用
  3. 您可以添加自己的公共方法来分配"父表单"作为儿童表格的成员或财产。
  4. 您可以使用反射来查找" main"的实例。或者"父母"在创建或展示任何儿童表格时形成。如果你这样做,只做一次而不是每次请求。尝试缓存该信息。
  5. 您可以通读System.Windows.Forms命名空间,了解是否已有一系列对象,您可以通过这些对象迭代查找主要表单。
  6. 我建议选项2或5。

答案 1 :(得分:2)

那是因为您创建了一个新的Form1并在该表单上启用了该按钮。相反,您必须传递实际打开的表单实例。

出于设计目的,您可能希望在这两种形式之间使用控制器类。这将有助于您简化在两个表单之间传递数据或操作的复杂性,并使您能够更好地升级应用程序..

当您打开ConfigureForm时,您必须执行以下操作(最简单的形式,但不推荐。)

...
{
    ConfigureForm frmConfigure = new ConfigureForm(this);
}

然后在ConfigureForm

public partial class ConfigureForm : Form
{
    private From1 mainForm = null;

    public ConfigureForm()
    {
        InitializeComponent();
    }

    public ConfigureForm(Form callingForm):this()
    {
        mainForm = callingForm as Form1;
    }

    private void Portal2HammerButtonEnable_Click(object sender, EventArgs e)
    {
        mainForm.Portal2HammerButton.Enabled = true;
    }
}