如果被调用的窗口已经运行,则关闭它并运行新调用的窗口

时间:2013-05-09 08:04:32

标签: c# .net winforms

在我的应用程序中有几次我必须调用一个窗口(类)。这个窗口的工作是显示一个单词的含义。当我再次调用该窗口时,一个新窗口显示,但前一个窗口也显示。 我有两个名为form1form2的表单。

Form1就是这样:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    { 
         string a = textBox1.Text;
         Form2 s = new Form2(a);// it will be called as many time as i click
         s.Show();
    }
}

Form2就是这样:

public partial class Form2 : Form
{
    public Form2(string s)
    {
        InitializeComponent();
        label1.Text = s;
    }
}

我想要的是在form1内部,如果我调用form2它会显示但是如果我再次调用form2,之前的form2窗口将自动关闭,并且将显示新的form2窗口而不是之前的窗口。 我怎样才能做到这一点????

2 个答案:

答案 0 :(得分:1)

这是一个在类级别存储Form2引用的示例,正​​如其他人已经提到的那样:

public partial class Form1 : Form
{

    private Form2 f2 = null;

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        if (f2 != null && !f2.IsDisposed)
        {
            f2.Dispose();    
        }

        string a = textBox1.Text;
        f2 = new Form2(a);
        f2.Show();
    }

}

答案 1 :(得分:0)

我认为你应该考虑使用单身模式。

您可以像这样实现:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    { 
         string a = textBox1.Text;
         Form2.ShowMeaning(a);// it will be called as many time as you click
    }
}

和Form2

public partial class Form2 : Form
{
    private static readonly Form2 _formInstance = new Form2();

    private Form2()
    {
        InitializeComponent();
    }

    private void LoadMeaning(string s)
    {
        label1.Text = s;
    }

    //Override method to prevent disposing the form when closing.
    protected override void OnClosing(CancelEventArgs e)
    {
        e.Cancel = true;
        this.Hide();
    }

    public static void ShowMeaning(string s)
    {
        _formInstance.LoadMeaning(s);
        _formInstance.Show();
    }
}

希望它有所帮助。