我有一个继承自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
,但取决于某些运行时设置和数据)
答案 0 :(得分:0)
有些事件也会在设计师中被解雇,这也是为Winforms设计师提供了所见即所得的能力。值得一提的是Paint,Shown也被解雇了,等等。提供DesignMode属性以允许您判断事件处理程序是否在设计时运行。修正:
void BaseClass_Shown(object sender, EventArgs e) {
if (!this.DesignMode) {
Close();
MessageBox.Show("This cannot be opened.");
}
}
请注意您的方法中的缺陷,此事件也会触发派生形式。你可能会帮助太多。