我正在开发一个应用程序,其中有一个主要表单和几个可以同时使用的其他表单。当用户点击打开另一个表单时,我想使其单击表单按钮,如果表单已经打开,则不会再次打开表单。
showDialog无法正常工作,因为用户仍然需要访问主窗体上的控件。
这是我的帮助窗口代码,所有其他表单以相同的方式打开。
private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
Form help = new help();
help.Show();
}
答案 0 :(得分:13)
或者,您可以使用应用程序的打开表单来查看它是否已打开
btn_LaunchHelp(object o, EventArgs e)
{
foreach (Form f in Application.OpenForms)
{
if (f is HelpForm)
{
f.Focus();
return;
}
}
new help().Show();
}
编辑:为了更清楚,这允许用户随时关闭帮助,并且比保存对“帮助”窗口的引用更容易管理。无需清理,无需维护。
答案 1 :(得分:10)
使用单身人士:
class HelpForm : Form
{
private static HelpForm _instance;
public static HelpForm GetInstance()
{
if(_instance == null) _instance = new HelpForm();
return _instance;
}
}
.......
private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
HelpForm form = HelpForm.GetInstance();
if(!form.Visible)
{
form.Show();
}
else
{
form.BringToFront();
}
}
答案 2 :(得分:2)
根据您的管理方式,您可以做一些事情:
答案 3 :(得分:1)
你可以这样继续,在顶部声明theese 2变量:
private static readonly object MyLock = new object();
private static Form1 _Instance = null;
之后
public Form1 GetFormInstance
{
get
{
lock (MyLock)
{
if (_Instance == null || _Instance.IsDisposed)
{
_Instance = new Form1();
}
else
{
_Instance.BringToFront();
}
return Form1._Instance;
}
}
}
输入Form1_FormClosed事件
Form1._Instance = null
在调用这样的表格之后:
Form1.GetFormInstance.Show();
希望它会有所帮助。
答案 4 :(得分:1)
这可以帮助它为我工作
private static Mutex m_Mutex;
bool IsNew;
m_Mutex = new Mutex(true, Application.ProductName, out IsNew);
if (IsNew)
{
Application.Run(new Form1());
}
有关更好的文档,请参见下文 http://projectpeeker.com/2018/07/04/opening-of-windows-application-multiple-times/
答案 5 :(得分:0)
也许它会帮助你。
private Form help;
private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
if (help == null || (help != null && help.IsDisposed))
{
help = new Form();
}
if (!help.Visible)
{
help.Show();
}
else
{
help.BringToFront();
}
}
答案 6 :(得分:-1)
您是否考虑过制作MDI表格?这可确保您的父表单始终可见,并且您的子表单包含在父表单中。然后,您只需要遍历表单列表并在其上调用Show。不需要单身人士(无论如何,许多人都认为这是不好的编程实践)。
答案 7 :(得分:-3)
尝试将“帮助”表单设为全局。
private Form help;
private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
if(help == null)
help = new help();
help.Show();
}