我想創建一個程序的自定義消息框,所以我添加了一個窗體項目。我希望它的行爲類似於MessageBox
,因爲它是靜態的,我只需撥打MessageBox.Show(a, b, c, ...)
即可。然而,在表單設計師中,我看不出如何使它變成靜態的。我可以在代碼中添加static
嗎?在設計者模式中是否存在屬性設置?C#靜態窗體添加到項目?
謝謝!
我想創建一個程序的自定義消息框,所以我添加了一個窗體項目。我希望它的行爲類似於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();
}
}
添加一個靜態方法來表單顯示本身並返回的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看到這一點。 http://msdn.microsoft.com/en-us/library/system.windows.forms.messagebox.aspx –