开发者

how to prevent opening a form multiple times in c#

开发者 https://www.devze.com 2023-03-13 16:36 出处:网络
i have created an application in which a menustrip is present in which 2 buttons are there, one for ADD, and another for UPDATE & both controls are in a single form, means a butto开发者_开发问答n

i have created an application in which a menustrip is present in which 2 buttons are there, one for ADD, and another for UPDATE & both controls are in a single form, means a butto开发者_开发问答n of add & update is there in a single form, whenever i press add button in menustrip update button will be disabled, and when i press update on menustrip the add button will disable. how to do this? i m doing this by show method but that form is opening multiple times using show().

    private void addRecordsToolStripMenuItem_Click(object sender, EventArgs e)
    {
           Form1 f2 = new Form1();
           f2.MdiParent = this;
           f2.Show();
           f2.button1.Enabled = true;

    }

    private void updateRecordsToolStripMenuItem_Click(object sender, EventArgs e)
    {
                Form1 f2 = new Form1();
                f2.MdiParent = this;
                f2.Show();
                f2.button2.Enabled = true;
                f2.button1.Enabled = false;

    }


you simply have to use a single form in this case. try using the singleton approach -

http://hashfactor.wordpress.com/2009/03/31/c-winforms-create-a-single-instance-form/


try using .ShowDialog() instead .Show() and no other form will be able to be clicked on until that one closes.


To do that you'll need to have an instance of that Form outside of those methods that you dismply show if the Form has already been created, or create and show it if it has not (this is the singleton pattern). Here's an example:

Form1 f2 = null;

private void addRecordsToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (f2 == null)
    {
         f2 = new Form1();
         f2.MdiParent = this;
         f2.button1.Enabled = true;
    }
    f2.Show();
}

private void updateRecordsToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (f2 == null)
    {
        f2.MdiParent = this;
        f2.button2.Enabled = true;
        f2.button1.Enabled = false;
    }
    f2.Show();
}

One question on your disabling of the menu items though, how do you plan on re-enabling them after they have been disabled?


just try to check that form is already opened or not by using its Text Property.. if it is opened just focus on that form other wise show that form as normally

private void button1_Click(object sender, EventArgs e)
        {
            bool IsOpen = false;
            foreach (Form f in Application.OpenForms)
            {
                if (f.Text == "Form1")
                {
                    IsOpen = true;
                    f.Focus();
                    break;
                }
            }

            if (IsOpen == false)
            {
                Form f1 = new Form1();
                f1.Show();

            }
        }

Try This Guys Its Simple

0

精彩评论

暂无评论...
验证码 换一张
取 消