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