以设计者的方式在Form的基类中显示处理程序

时间:2013-09-04 10:08:46

标签: c# winforms visual-studio-2010 designer

我有一个继承自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.");
    }
}

现在,当我将这个Form子类化并在设计器中打开它时,我实际上得到了这个消息,它关闭了设计器中的表单,使我无法直观地编辑它。

我可以使用一些布尔值来阻止Close()MessageBox发生吗?

(小背景:并不总是调用Close,但取决于某些运行时设置和数据)

1 个答案:

答案 0 :(得分:0)

有些事件也会在设计师中被解雇,这也是为Winforms设计师提供了所见即所得的能力。值得一提的是Paint,Shown也被解雇了,等等。提供DesignMode属性以允许您判断事件处理程序是否在设计时运行。修正:

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

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