public void IsOpen(Form f)
{
bool open = false;
FormCollection fc = Application.OpenForms;
foreach (Form form in fc)
{
if (form == f)
{
if (form.WindowState == FormWindowState.Minimized)
{
form.WindowState = FormWindowState.Normal;
}
form.BringToFront();
open = true;
}
}
if (open == false)
{
f = new Form();
f.Show();
}
}
所以我在这里得到了一些代码。这是为了检查应用程序中的打开表单并确定表单是否已打开。现在我正在使用它,因为有几种形式我不想同时打开两次。我的问题是我无法打开我想要的表单类型。我想获得F的formtype并打开该特定类型的表单。例如:
private void mnuSettings_Click(object sender, EventArgs e)
{
Settings set = new Settings();
IsOpen(set);
}
所以我在这里传递表格,所以f应该等于设置表格。但我需要这种方法来动态打开不同的表单。所以说我使用Form1而不是设置,如果它没有打开,我需要打开Form1的一个实例。非常感谢任何帮助。
答案 0 :(得分:1)
public Dictionary<Type, Form> forms = new Dictionary<Type, Form>();
public void OpenSingletonForm<T>() where T : Form, new() {
if (!forms.ContainsKey(typeof(T)) {
forms.Add(typeof(T), new T());
}
forms[typeof(T)].Show();
}
并像这样使用它:
OpenSingletonForm<SettingsDialog>();