C#スタティックフォームはプロジェクトに追加されましたか?

私はプログラムのためのカスタムメッセージボックスを作成したいので、私はWindowsフォームアイテムを追加しました。静的で、 MessageBox.Show(a、b、c、...)を呼び出すだけで MessageBox のように動作するようにしたいと思います。しかし、フォームデザイナーでは、どのようにして静的にすることはできません。コードに static を追加するだけですか?デザイナーモードで不足しているプロパティ設定がありますか?

ありがとう!

4

4 答え

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
追加された
これはMSDNでも見ることができます。 msdn.microsoft.com/en-us/library/ …
追加された 著者 Austin Salonen,

1つのメソッドがstaticとして新しいインスタンスとインスタンスをインスタンス化する通常のクラスです。

public class MyMessageBox
{
   public static MyResult Show(params)
   {
       var myMessageBox = new MyMessageBox();
       myMessageBox.Message = params ...
       return  myMessageBox.ShowDialog();
   }
}
4
追加された

独自のフォームを表示し、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
  }

}
2
追加された

オブジェクト参照なしで静的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を呼び出すことを忘れないでください。

1
追加された