Reputation: 311
i want to Uncheck a ContextMenuStrip item on other form closing. here is my code:
Form1:
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;
}
}
Form2:
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
// Code for Unckeck openForm1ToolStripMenuItem
}
Why the ischecked is not accessible in other forms?
Upvotes: 0
Views: 149
Reputation: 32701
You have either show form as dialog like this
frm2.ShowDialog();
or you have to create an event in form2. That you fire when the form is closing. You will register that event in form 1 and then uncheck your box.
In form 2 declare event like
public event EventHandler onFormClosed;
then in closing event of Form2
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
if(onFormClosed!= null)
onFormClosed(this,EventArgs.Empty);
}
then in your form 1
Form2 frm2 = new Form2();
frm.onFormClosed += frm_onFormClosed;
frm2.Show();
this will create a method like this
private void frm_onFormClosed(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(() => openForm1ToolStripMenuItem.Checked = false);
}
else
{
openForm1ToolStripMenuItem.Checked = false;
}
}
Upvotes: 0
Reputation: 233
You'll need a reference to the first form in the second form in order to change it's properties. Also, the two answers above are better ways to accomplish this task, even if they don't directly answer the question asked. :)
Form1:
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;
}
}
Form2:
public Form MainForm { get; set; }
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
this.MainForm.ischecked = false;
}
Upvotes: 0
Reputation: 63357
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;
}
}
Upvotes: 1