#c# #forms #static
#c# #формы #статическая
Вопрос:
Я хочу создать пользовательское окно сообщения для программы, поэтому я добавил элемент формы Windows. Я бы хотел, чтобы она вела себя так, как MessageBox
будто она статична, и я просто вызываю MessageBox.Show(a, b, c, ...)
. Однако в конструкторе форм я не вижу, как я могу сделать ее статичной. Могу ли я просто добавить static
в код? Есть ли параметр свойства, которого мне не хватает в режиме конструктора?
Спасибо!
Ответ №1:
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. msdn.microsoft.com/en-us/library /…
Ответ №2:
Это обычный класс с одним статическим методом, который создает экземпляр нового экземпляра и действует.
public class MyMessageBox
{
public static MyResult Show(params)
{
var myMessageBox = new MyMessageBox();
myMessageBox.Message = params ...
return myMessageBox.ShowDialog();
}
}
Ответ №3:
Добавьте в свою форму статический метод, который отображает сам себя и возвращает 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
}
}
Ответ №4:
Если вы хотите создать статическую Форму1 для доступа к ней без ссылки на объект, вы можете изменить 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 для доступа из других потоков.