C#项目中添加了静态表单?

C#项目中添加了静态表单?,c#,forms,static,C#,Forms,Static,我想为程序创建一个自定义消息框,因此我添加了一个windows窗体项。我希望它的行为类似于MessageBox,因为它是静态的,我只需调用MessageBox.Show(a,b,c,…)。然而,在表单设计器中,我不知道如何使其成为静态的。我可以在代码中添加static吗?在设计器模式中是否缺少属性设置 谢谢 MessageBox不是静态类,但是Show方法是静态类。在代码中使显示静态。例如 public class MyMessageBox : Form { public static

我想为程序创建一个自定义消息框,因此我添加了一个windows窗体项。我希望它的行为类似于
MessageBox
,因为它是静态的,我只需调用
MessageBox.Show(a,b,c,…)
。然而,在表单设计器中,我不知道如何使其成为静态的。我可以在代码中添加
static
吗?在设计器模式中是否缺少属性设置


谢谢

MessageBox
不是静态类,但是
Show
方法是静态类。在代码中使
显示
静态。例如

public class MyMessageBox : Form
{
    public static int MyShow()
    {
        // create instance of your custom message box form
        // show it
        // return result 
    }
}

它是一个常规类,其中一个方法是静态的,用于实例化新实例和act

public class MyMessageBox
{
   public static MyResult Show(params)
   {
       var myMessageBox = new MyMessageBox();
       myMessageBox.Message = params ...
       return  myMessageBox.ShowDialog();
   }
}

向窗体中添加一个显示自身并返回DialogResult的静态方法:

public partial class MyMessageBoxForm : Form {

  public static DialogResult Show(string message) {
    using (MyMessageBoxForm form = new MyMessageBoxForm(message)) {
      return form.ShowDialog();
    }

  private MyMessageBoxForm(string message) {
    // do something with message
  }

}

如果要创建静态Form1,以便在无对象引用的情况下访问它,可以更改Program.cs:

public class Program
{
    public static Form1 YourForm; 

    [STAThread]
    static void Main(string[] args)
    {
        using (Form1 mainForm = new Form1())
        {
            YourForm = mainForm;
            Application.Run(mainForm);
        }
        YourForm = null;
    }
}
并从程序的任何位置调用Form1类方法:

Program.YouForm.DoAnything();

不要忘记调用Invoke以从其他线程进行访问

您也可以从MSDN中看到这一点。