如何在c#中避免多个windows窗体实例

Anu*_*uya 9 c# singleton

如何在c#中避免多个windows窗体实例?我只想运行一个表单实例.因为有可能从我的应用程序的许多页面打开相同的表单.

Nat*_*ium 11

实现Singleton模式

一个例子:CodeProject:Simple Singleton Forms(好吧,它在VB.NET中,但只是为了给你一个线索)

  • 确保您重载FormClosing并检查关闭原因,如果原因是user,则隐藏表单并设置cancel = true (5认同)

ada*_*ost 9

是的,它有单身模式,

用于创建单个对象的代码,

public partial class Form2 : Form
{
 .....
 private static Form2 inst;
 public static Form2  GetForm
 {
   get
    {
     if (inst == null || inst.IsDisposed)
         inst = new Form2();
     return inst;
     }
 }
 ....
}
Run Code Online (Sandbox Code Playgroud)

调用/显示此表单,

Form2.GetForm.Show();
Run Code Online (Sandbox Code Playgroud)


小智 6

当您显示对话框时,只需使用.ShowDialog();而不是.Show();


Vas*_*lis 5

为了使该表单再次出现在前台的解决方案是:

    private bool checkWindowOpen(string windowName)
    {
        for (int i = 0; i < Application.OpenForms.Count; i++)
        {
            if (Application.OpenForms[i].Name.Equals(windowName))
            {
                Application.OpenForms[i].BringToFront();
                return false;
            }
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)

windowName本质上是Windows窗体的类名,返回值可用于不创建新的窗体实例。