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



我在Form1上有一个按钮,默认情况下启动禁用。我有一个ConfigureForm,在那里我有一个菜单条,有一个选项来启用Form1中的按钮。

所以我的代码是:
    private void Portal2HammerButtonEnable_Click(object sender, EventArgs e)
    {
        Form1 frm1 = new Form1();
        frm1.Portal2HammerButton.Enabled = true;
    }

但是当我关闭ConfigureForm并查看按钮时,它仍然被禁用。

这是因为您创建了一个新的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;
    }
}

单击此按钮将创建一个新表单。您需要的是对Form1实际实例的有效引用。

你有一些可用的选项:

  1. 如果其中一个表单是应用程序的"主"表单,那么你可以确保它首先被创建,从而创建其他"子"表单。你可以重写任何子表单的构造函数,以包含对"主"表单的引用。
  2. 你可以在一个公共静态类中保留对所有重要表单的引用,这样所有表单都可以访问这些引用
  3. 您可以添加自己的公共方法来将"父窗体"分配为子窗体的成员或属性。
  4. 在创建或显示任何子表单时,可以使用反射来查找"主"或"父"表单的实例。如果你这样做,只做一次,而不是每次都做。尝试缓存该信息。
  5. 你可以阅读System.Windows.Forms命名空间,看看是否已经有一个对象的集合,通过它你可以迭代找到你的主要形式。

相关内容

  • 没有找到相关文章

最新更新