【问题标题】:Enable/Disable SubmenuItems on Mdi Parent form in C# using Windows Application?使用 Windows 应用程序在 C# 中启用/禁用 Mdi 父窗体上的子菜单项?
【发布时间】:2025-11-29 23:30:01
【问题描述】:

在 Mdi 父表单上,我使用菜单项调用我的子表单。在子表单上加载我的菜单项应该在子表单关闭时禁用它会再次启用..,我尝试 FormClosing 事件处理程序我得到答案..,

  private void btnMn1_Click(object sender, EventArgs e)
    {
        Forms.Cnblfrm cnbfrm = new Cnsmblfrm();
        cnsmbfrm.MdiParent = this;
        cnsmbfrm.Text = btnMn1.Text;
        cnsmbfrm.Show();
        this.btnMn1.Enabled = false;
        cnbfrm.FormClosed += new FormClosedEventHandler(cnsmbfrm_FormClosed);
    }

    void cnbfrm_FormClosed(object sender, FormClosedEventArgs e)
    {
        btnMn1.Enabled = true;
        //throw new NotImplementedException();
    }

通过使用上面的代码,我得到了答案,但我有 20 多个 ChildForms。通过使用这种方法我的编码正在增加......,有什么方法可以代替这个......,

【问题讨论】:

    标签: c# winforms event-handling toolstripmenu


    【解决方案1】:

    如果我没听错的话:你有 20 个按钮,每个按钮都会打开一个特定的表单,对吧?

    如果是这样,您可以将每个按钮的标签属性设置为它打开的表单。然后你必须遍历所有按钮并设置点击事件。所有按钮都有相同的点击事件。 (我们称之为 btn_click)

    btn_click 的代码如下:

    private void btn_click(object sender, EventArgs e)
    {
       Button button = sender as Button;
       if(button == null)
          return;
       Form form = button.Tag as Form;
       if(form == null)
          return;
       form.MdiParent = this;
       form.Text = button.Text;
       form.Show();
       button.Enabled = false;
       form.Tag = button;
       form.FormClosed += FormClosed;
    }
    
    private void FormClosed(object sender, FormClosedEventArgs e)
    {
       Form form = sender as Form;
       if(form == null)
          return;
       Button button = form.Tag as Button;
       if(button == null)
          return;
       button.Enabled = true;
    }
    

    【讨论】:

    • 如何为每个表单设置标签
    • 我认为这部分你必须手动完成。所以将每个表单都分配给构造函数中的按钮
    • 我在哪里分配 mdiparent 表单或表单中的标签
    • 在包含其他表单按钮的表单中。我认为这是您的中父母形式
    • 是的,这是 mdiparent 表单。从 mdiparent 表单我想访问子表单
    最近更新 更多