0

現在、複数のプロジェクトを含む大きなソリューションに取り組んでいます。

私が使用した多くのフォームform.ShowDialog();またはfrom.Show(); (フォームではなくフォームの名前)

ヤスリ糸を使ってローディング画面を作りました。

したがって、すべてをオーバーロードし、この新しい関数を実装する必要がありform.Show()ますform.ShowDialog()

Google で数時間検索しましたが、役立つ情報が見つかりません。そして、私は自分でさまざまな薄さを試しました。しかし、これを理解することはできません。

すべてのフォーム Show()ShowDialog()ソリューションをオーバーロードする方法はありますか?

4

5 に答える 5

0

これをcsファイルの先頭に追加します

using ext;

namespace ext
{
    public static class extensions
    {
        public static DialogResult ShowDialog(this Form form, string title)
        {
            DialogResult ret;


            form.Text = title;

            ret = form.ShowDialog();

            return ret;
        }
    }
}

これにより、すべてのフォーム ShowDialog() 関数がオーバーロードされ、ダイアログを表示するときにフォーム タイトルを取得して設定します。

private void form(object sender, EventArgs e)
{
    this.ShowDialog("My new title");
}
于 2013-07-29T14:39:26.413 に答える
0

Show()考えられる解決策の 1 つは、との既定の機能をオーバーライドするカスタム基本クラスからフォームを派生させることですShowDialog()。これは、2 つのメソッドのいずれかに使用する任意のフォームを見つけて、この機能を実装する必要があることを意味します。例えば

フォームを実装するカスタム クラスを作成します。

public class CustomForm : Form
{
    public DialogResult ShowDialog()
    {
        throw new NotImplementedException();
    }
}

そのフォームから派生します。

public partial class Form2 : CustomForm
{

}

あれを呼べ、

form2.ShowDialog();
于 2013-07-29T14:38:13.283 に答える
0

一部の難解な Win32 呼び出しを使用すると、これらのメソッドをフックできる可能性があります。ただし、これを行うには .NET の領域の外に出ることになり、ソリューションは価値があるよりも複雑になります。次の 2 つのいずれかをお勧めします。

  1. から派生する基本クラスを作成しますForm。新しい基本クラスには、ShowおよびShowDialogメソッドの新しい宣言が含まれます (基になるメンバーnewを非表示にするキーワードを使用)。Formそれに新しいロジックを追加し、必要に応じて元のForm.Show/を呼び出しForm.ShowDialogます。アプリケーションのすべてのフォームを新しい基本クラスから派生させます。
  2. 上記の基本クラスに配置したのと同じことを行う静的ユーティリティ メソッド (または拡張メソッド) を追加します。
于 2013-07-29T14:38:14.700 に答える