Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 取消勾选其他表单上的ContextMenuStrip项关闭_C#_Winforms_Contextmenu - Fatal编程技术网

C# 取消勾选其他表单上的ContextMenuStrip项关闭

C# 取消勾选其他表单上的ContextMenuStrip项关闭,c#,winforms,contextmenu,C#,Winforms,Contextmenu,我想在其他表单关闭时取消选中ContextMenuStrip项。 这是我的密码: 表格1: public bool ischecked { get { return openForm1ToolStripMenuItem.Checked; } set { openForm1ToolStripMenuItem.Checked = value; } } bool isForm2Open = false; bool isForm3O

我想在其他表单关闭时取消选中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;
        }
    }
   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:

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    // Code for Unckeck openForm1ToolStripMenuItem
}
public Form MainForm { get; set; }

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

为什么在其他表单中无法访问ischecked?

您可以使用如下方式显示表单作为对话框

 frm2.ShowDialog();
 private void frm_onFormClosed(object sender, EventArgs e)
 {
    if (this.InvokeRequired)
    {   
        this.Invoke(() =>  openForm1ToolStripMenuItem.Checked = false);
    }
    else
    {
       openForm1ToolStripMenuItem.Checked = false;
    }

 }
或者您必须在form2中创建一个事件。当窗体关闭时您将触发。您将在表格1中注册该事件,然后取消选中您的复选框

在表格2中,声明事件如下

 public event EventHandler onFormClosed;
然后在Form2的关闭事件中

 private void Form2_FormClosed(object sender, FormClosedEventArgs e)
 {
    if(onFormClosed!= null)
          onFormClosed(this,EventArgs.Empty);
 }
然后在你的表格1中

 Form2 frm2 = new Form2();
 frm.onFormClosed += frm_onFormClosed;
 frm2.Show();
这将创建这样一个方法

 frm2.ShowDialog();
 private void frm_onFormClosed(object sender, EventArgs e)
 {
    if (this.InvokeRequired)
    {   
        this.Invoke(() =>  openForm1ToolStripMenuItem.Checked = false);
    }
    else
    {
       openForm1ToolStripMenuItem.Checked = 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.Show();
            isForm2Open = true;
            openForm1ToolStripMenuItem.Checked = true;
        }
        else
        {
            openForm1ToolStripMenuItem.Checked = false;
            isForm2Open = false;
        }
    }
   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:

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
    // Code for Unckeck openForm1ToolStripMenuItem
}
public Form MainForm { get; set; }

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