2011-10-27 83 views
4

我想创建一个程序的自定义消息框,所以我添加了一个窗体项目。我希望它的行为类似于MessageBox,因为它是静态的,我只需拨打MessageBox.Show(a, b, c, ...)即可。然而,在表单设计师中,我看不出如何使它变成静态的。我可以在代码中添加static吗?在设计者模式中是否存在属性设置?C#静态窗体添加到项目?

谢谢!

回答

6

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

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

你可以从MSDN看到这一点。 http://msdn.microsoft.com/en-us/library/system.windows.forms.messagebox.aspx –

4

它是一个常规类,其中一个方法是静态实例化新实例和动作。

public class MyMessageBox 
{ 
    public static MyResult Show(params) 
    { 
     var myMessageBox = new MyMessageBox(); 
     myMessageBox.Message = params ... 
     return myMessageBox.ShowDialog(); 
    } 
} 
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 
    } 

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

相关问题