C# 取消勾选其他表单上的ContextMenuStrip项关闭
我想在其他表单关闭时取消选中ContextMenuStrip项。 这是我的密码: 表格1: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
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;
}