我想创建一个程序的自定义消息框,所以我添加了一个窗体项目。我希望它的行为类似于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 –