2

Shown にイベント ハンドラーを登録する Form から継承する基本クラスがあります。

class BaseClass : Form {
    public BaseClass() : base() {
        Shown += new EventHandler(BaseClass_Shown);
    }
    void BaseClass_Shown(object sender, EventArgs e) {
        Close();
        MessageBox.Show("This cannot be opened.");
    }
}

ここで、このフォームをサブクラス化してデザイナーで開くと、実際にそのメッセージが表示され、デザイナーでフォームが閉じられ、視覚的に編集できなくなります。

Close()とが起こるのを防ぐために使用できるブール値はおそらくありMessageBoxますか?

(ちょっとした背景:Closeは常に呼び出されるわけではありませんが、実行時の設定とデータによって異なります)

4

1 に答える 1

3

一部のイベントはデザイナーでも発生します。これにより、Winforms デザイナーに wysiwyg 機能が与えられます。特にペイント、ショーンも発射されます。DesignMode プロパティは、イベント ハンドラーがデザイン時に実行されているかどうかを確認できるように提供されています。修理:

void BaseClass_Shown(object sender, EventArgs e) {
    if (!this.DesignMode) {
        Close();
        MessageBox.Show("This cannot be opened.");
    }
}

アプローチの欠陥に注意してください。このイベントは、派生フォームに対しても発生します。手伝いすぎかもしれません。

于 2013-09-04T10:27:40.787 に答える