停止WinForms中的冒泡事件

时间:2012-10-10 13:11:09

标签: .net winforms events event-bubbling

我有(自定义)MyTextbox。 MyTextbox处于打开状态(自定义)MyPanel,面板位于MyForm

当用户在MyTextbox中编辑文本并按,说“DEL”时,MyForm会收到_KeyDown事件......

但是在表单上我按下“删除”时编写了另一个动作,所以它执行表单操作以及文本框选择删除...

如何阻止事件从文本框传播到表单,或将文本框标识为事件的发件人?

PS。
由于多种原因,我无法将 KeyPreview 变为“False”,我需要找到另一种解决方案。

PPS。
想象一下MS Word编辑器,你有一个可编辑的“矩形”...如果你编辑矩形中的文本(在编辑模式下选择矩形),你的“Del”应该删除矩形中的字符,如果没有,它应删除矩形本身...(如果选择了矩形)。

在我的情况下,我在矩形的编辑模式中选择了一些文本,但是当我按DEL而不是删除文本时,删除了矩形本身....

1 个答案:

答案 0 :(得分:0)

确保表单的KeyPreview属性设置为False,这通常是表单的默认值。

如果你有KeyPreview=true,可能的解决办法是检查活动控件并过滤表格对关键事件的处理:

protected override void OnKeyDown(KeyEventArgs e) {
  if (ActiveControl.GetType() != typeof(TextBox)) {
    base.OnKeyDown(e);
  }
}