C# 以'形式显示处理程序;以设计器的方式创建s基类

C# 以'形式显示处理程序;以设计器的方式创建s基类,c#,winforms,visual-studio-2010,designer,C#,Winforms,Visual Studio 2010,Designer,我有一个从表单继承的基类,它在上注册一个事件处理程序,如图所示: class BaseClass : Form { public BaseClass() : base() { Shown += new EventHandler(BaseClass_Shown); } void BaseClass_Shown(object sender, EventArgs e) { Close(); MessageBox.Show("Thi

我有一个从表单继承的基类,它在上注册一个事件处理程序,如图所示:

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
,但这取决于一些运行时设置和数据)

设计器中也会触发一些事件,这是Winforms设计器所见即所得能力的来源。值得注意的是,图中所示的油漆也已烧制,等等。DesignMode属性允许您判断事件处理程序是否在设计时运行。修正:

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

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

您尝试过
表单的
设计模式
属性吗?()@AlessandroD'Andria我现在有了。这正是我想要的。请给我一个答案,这样我就可以接受了。别担心,但要小心,因为有时候DebugMode工作不正常。我想为派生表单启动它。这是“模块”的基础,我只想让这些模块显示是否设置了特定的设置。你提醒程序员,他做的错误是一个异常,而不是一个消息框。这应该与InvalidOperationException一起报告。这不是程序员的消息,而是用户消息。用户必须首先做出选择。通过禁用无效选择创建直观的用户界面。易于使用Enabled属性。“你做错了!”消息框很刺耳。我同意,我可以这样做,但禁用菜单选项并不能给你任何关于为什么禁用它的线索。一个消息框可以。消息不是“您无法打开”,而是“您无法打开,因为您没有设置foo,请在foomenu->foosettings中设置foo”。这只能在应用程序中执行一次,而不是每次运行它。该选项存储在应用程序中。