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

时间:2011-10-27 16:00:25

标签: c# forms static

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

谢谢!

4 个答案:

答案 0 :(得分:6)

MessageBox不是静态类,但是Show方法。在代码中使Show为静态。 E.g。

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

答案 1 :(得分:4)

它是一个常规类,有一个方法作为静态实例化新实例并执行。

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

答案 2 :(得分:2)

向表单中添加一个静态方法,显示自身并返回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
  }

}

答案 3 :(得分:1)

如果要创建静态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以从其他线程访问。