C # Statische vorm toegevoegd aan project?

Ik wil een aangepast berichtvak maken voor een programma, dus ik heb een vensterformulier toegevoegd. Ik zou willen dat het zich gedroeg als MessageBox in die zin dat het statisch is en ik bel gewoon MessageBox.Show (a, b, c, ...) . In de formulierenontwerper zie ik echter niet hoe ik het statisch kan maken. Kan ik gewoon statisch aan de code toevoegen? Is er een eigenschapsinstelling die ik mis in de ontwerpmodus?

Bedankt!

4

4 antwoord

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 
    }
}
6
toegevoegd
Je kunt dit ook vanuit MSDN zien. msdn.microsoft.com/en-us/library/ & hellip;
toegevoegd de auteur Austin Salonen, de bron

Het is een reguliere klasse met één methode als statisch die een nieuw instantie en handeling initieert.

public class MyMessageBox
{
   public static MyResult Show(params)
   {
       var myMessageBox = new MyMessageBox();
       myMessageBox.Message = params ...
       return  myMessageBox.ShowDialog();
   }
}
4
toegevoegd

Voeg een statische methode toe aan uw formulier dat zichzelf weergeeft en een DialogResult retourneert:

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
  }

}
2
toegevoegd

Als u statische Form1 wilt maken voor toegang tot het zonder objectreferentie, kunt u Program.cs wijzigen:

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;
    }
}

en bel Form1-klassemethoden vanuit elke plaats van uw programma:

Program.YouForm.DoAnything();

Vergeet niet om Invoke aan te roepen voor toegang vanuit andere threads.

1
toegevoegd