1

我有一个(自定义)MyTextbox。MyTextbox 在 on (custom) 上MyPanel,面板在MyForm.

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

但是在表单上,​​我在按下“删除”时编写了其他操作,因此它执行表单操作以及文本框选择删除...

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

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

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

就我而言,我处于矩形的编辑模式中,我选择了一些文本,但是当我按 DEL 而不是删除文本时,会删除矩形本身......

4

1 回答 1

1

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

如果您有一个可能的解决KeyPreview=true方法是检查活动控件并过滤表单对关键事件的处理:

protected override void OnKeyDown(KeyEventArgs e) {
  if (ActiveControl.GetType() != typeof(TextBox)) {
    base.OnKeyDown(e);
  }
}
于 2012-10-10T13:17:36.577 回答