我正试图一次打开一张表格。如果用户在一个表单已打开时尝试打开另一个表单,则不应该打开它。
我的代码:
else if (instrument_name == "Micrometer")
{
this.Hide();
Form2 f2 = new Form2();
f2.ShowDialog();
this.readclose()
}
此处仅在未打开此表单时才打开表单2.
解决方案可能是:
Form fc = Application.OpenForms["UpdateWindow"];
if (fc != null)
fc.Close();
fm.Show();
但我不知道我应该在哪里写这个,因为如果我把它Form1_Load
,那么显然即使是第一次它也不会包含null。
我应该把它放在程序文件中吗?
答案 0 :(得分:0)
您可以创建类似'表单管理器'的smth,它将监视所有打开的表单。 在表单关闭的情况下,管理器打开它,否则重新打开它。
此解决方案与您的解决方案类似,但在这种情况下,所有逻辑都集中在一个地方,易于理解或维护。
答案 1 :(得分:0)
你可以采用不同的方式。但其中一个是实现单线模式。为此,您必须通过以下方式修改Form2:
public partial class Form2 : Form
{
private static Form2 Instance;
private Form2()
{
InitializeComponent();
}
public static Form2 GetForm2Instance()
{
if(Instance==null) Instance = new Form2();
return Instance;
}
public static void CloseOldForm2AndOpenNewForm2()
{
if (Instance != null) Instance.Close();
Instance = new Form2();
Instance.Show();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Instance = null;
}
}
正如您所看到的,Form2()是私有的。要加载表单,您必须使用以下代码:
//Case 1 if you porefer to use existing instance of the Form2
Form2 myForm = Form2.GetForm2Instance();
myForm.Show();
//Case 2 if you prefer to close old one and create a new Form2
Form2.CloseOldForm2AndOpenNewForm2()