在其他表单关闭时取消对ContextMenuStrip项的锁定

本文关键字:ContextMenuStrip 锁定 取消 其他 表单 | 更新日期: 2023-09-27 18:29:36

我想在其他表单关闭时取消选中ContextMenuStrip项。这是我的代码:

表格1:

   public bool ischecked
    {
        get { return openForm1ToolStripMenuItem.Checked; }
        set { openForm1ToolStripMenuItem.Checked = value; }
    }
    bool isForm2Open = false;
    bool isForm3Open = false;
    private void openForm1ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (!isForm2Open)
        {
            Form2 frm2 = new Form2();
            frm2.Show();
            isForm2Open = true;
            openForm1ToolStripMenuItem.Checked = true;
        }
        else
        {
            openForm1ToolStripMenuItem.Checked = false;
            isForm2Open = false;
        }
    }

表格2:

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    // Code for Unckeck openForm1ToolStripMenuItem
}

为什么ischecked不能以其他形式访问?

在其他表单关闭时取消对ContextMenuStrip项的锁定

private void openForm1ToolStripMenuItem_Click(object sender, EventArgs e) {
    ToolStripMenuItem item = sender as ToolStripMenuItem;
    if (!isForm2Open)
    {
        Form2 frm2 = new Form2();
        frm2.FormClosed += (s,ev) => {
           item.Checked = false;
           isForm2Open = false;
        };
        frm2.Show();
        isForm2Open = true;
        openForm1ToolStripMenuItem.Checked = true;
    }
    else
    {
        openForm1ToolStripMenuItem.Checked = false;
        isForm2Open = false;
    }
}

您需要在第二个表单中引用第一个表单才能更改其属性。此外,上面的两个答案是完成这项任务的更好方法,即使它们没有直接回答所问的问题。:)

表格1:

   public bool ischecked
    {
        get { return openForm1ToolStripMenuItem.Checked; }
        set { openForm1ToolStripMenuItem.Checked = value; }
    }
    bool isForm2Open = false;
    bool isForm3Open = false;
    private void openForm1ToolStripMenuItem_Click(object sender, EventArgs e)
    {
        if (!isForm2Open)
        {
            Form2 frm2 = new Form2();
            frm2.MainForm = this;
            frm2.Show();
            isForm2Open = true;
            openForm1ToolStripMenuItem.Checked = true;
        }
        else
        {
            openForm1ToolStripMenuItem.Checked = false;
            isForm2Open = false;
        }
    }

表格2:

public Form MainForm { get; set; }
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
  this.MainForm.ischecked = false;
}

您可以将表单显示为类似的对话框

 frm2.ShowDialog();

或者您必须在form2中创建一个事件。当窗体关闭时,您会开火。您将在表单1中注册该事件,然后取消选中您的框。

在表单2中,声明类似的事件

 public event EventHandler onFormClosed;

则在Form2 关闭事件中

 private void Form2_FormClosed(object sender, FormClosedEventArgs e)
 {
    if(onFormClosed!= null)
          onFormClosed(this,EventArgs.Empty);
 }

然后在你的中一

 Form2 frm2 = new Form2();
 frm.onFormClosed += frm_onFormClosed;
 frm2.Show();

这将创建一个类似于的方法

 private void frm_onFormClosed(object sender, EventArgs e)
 {
    if (this.InvokeRequired)
    {   
        this.Invoke(() =>  openForm1ToolStripMenuItem.Checked = false);
    }
    else
    {
       openForm1ToolStripMenuItem.Checked = false;
    }
 }
相关文章:
  • 没有找到相关文章