c#静态表单添加到项目中

本文关键字:项目 添加 静态 表单 | 更新日期: 2023-09-27 18:12:30

我想为程序创建一个自定义消息框,所以我添加了一个windows窗体项。我希望它的行为像MessageBox一样,因为它是静态的,我叫它MessageBox.Show(a, b, c, ...)。但是,在表单设计器中,我不知道如何将其设置为静态。我可以把static加到代码里吗?在设计器模式中是否缺少属性设置?

谢谢!

c#静态表单添加到项目中

MessageBox不是静态类,但Show方法是。在代码中将Show设置为静态。例如

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

它是一个常规类,只有一个静态方法,用于实例化新实例并进行操作。

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

添加一个静态方法到您的表单,显示自己并返回一个dialgresult:

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来访问其他线程。