2011-10-27 130 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從其他線程訪問。

相關問題