Я хочу создать настраиваемое окно сообщений для программы, поэтому я добавил элемент формы Windows. Я бы хотел, чтобы он вел себя как MessageBox
в том, что он статичен, и я просто вызываю MessageBox.Show (a, b, c, ...)
. Однако в дизайнере форм я не вижу, как я могу сделать его статичным. Могу ли я просто добавить static
в код? Есть ли параметр свойства, который мне не хватает в режиме конструктора?
Благодаря!
MessageBox
is not a static class, the Show
method however is. Make Show
static, in code. E.g.
public class MyMessageBox : Form
{
public static int MyShow()
{
//create instance of your custom message box form
//show it
//return result
}
}
Это обычный класс с одним методом как static, который создает экземпляр нового экземпляра и действует.
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 для доступа из других потоков.