0

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

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窗口而不是前一个。我怎样才能做到这一点????

4

2 回答 2

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();
    }

}
于 2013-05-09T15:23:07.243 回答
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();
    }
}

希望能帮助到你。

于 2013-05-09T13:34:16.070 回答