删除WinForm Control的原始事件行为

时间:2011-09-07 16:04:40

标签: c# winforms .net-4.0

我想删除表单中控件的原始事件行为(类似于设计模式)。 因此,当用户点击按钮时,我只想捕获该事件。我不希望触发原始按钮事件。这有点可能吗? 我正在寻找通用的解决方案。所以它应该适用于表单中的任何形式和任何控制。

原因:我写了一个表单验证规则设计器。它使用反射来枚举条目程序集中的所有表单类型。然后,用户可以选择表单类型,设计器创建该表单,枚举控件,并在设计器面板中嵌入表单。 单击控件,打开一个公式设计器面板,用户现在可以为该控件创建一个公式,并将公式保存到DB。 然后在正常的“运行时”模式下打开表单时,它会加载其验证公式。

2 个答案:

答案 0 :(得分:3)

Winforms设计器中事实上未禁用事件。设计器通过Reflection执行表单的构造函数,InitializeComponent()方法中的所有内容都会执行,包括事件订阅。只要这可能导致问题,控件就会检查DesignMode属性(例如阻止Timer启动)或自定义设计器。表单显示在透明分层窗口下方,其上绘制了选择矩形和拖动手柄。这可以防止鼠标点击和键盘焦点问题。

您可能应该查看this magazine article以使其适合您。

答案 1 :(得分:0)

根据我的理解,我猜你也可以使用“DesignMode”属性。在事件处理例程中,您可能希望通过检查此属性来绕过执行:

        if (this.DesignMode) return;

作为事件处理代码块中的第一个语句。