在我的应用程序中有几次我必须调用一个窗口(类)。这个窗口的工作是显示一个单词的含义。当我再次调用该窗口时,一个新窗口显示,但前一个窗口也显示。
我有两个名为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窗口而不是之前的窗口。 我怎样才能做到这一点????
答案 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();
}
}
希望它有所帮助。