2

我有一个继承自 Form 的基类,它在 Shown 上注册了一个事件处理程序:

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 设计器所见即所得能力的原因。值得注意的是 Paint,Shown 也会被解雇,等等。提供 DesignMode 属性是为了让您知道您的事件处理程序是否在设计时运行。使固定:

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

请注意您的方法中的缺陷,此事件也会针对派生形式触发。你可能帮得太多了。

于 2013-09-04T10:27:40.787 回答