progfa
progfa

Reputation: 311

Unckeck ContextMenuStrip item on other form closing

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

Answers (3)

Ehsan
Ehsan

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

JtM
JtM

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

King King
King King

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

Related Questions