Статическая форма C # добавлена в проект?

#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 для доступа из других потоков.