我有(自定义)MyTextbox
。 MyTextbox处于打开状态(自定义)MyPanel
,面板位于MyForm
。
当用户在MyTextbox中编辑文本并按,说“DEL”时,MyForm会收到_KeyDown
事件......
但是在表单上我按下“删除”时编写了另一个动作,所以它执行表单操作以及文本框选择删除...
如何阻止事件从文本框传播到表单,或将文本框标识为事件的发件人?
PS。
由于多种原因,我无法将 KeyPreview 变为“False”,我需要找到另一种解决方案。
PPS。
想象一下MS Word编辑器,你有一个可编辑的“矩形”...如果你编辑矩形中的文本(在编辑模式下选择矩形),你的“Del”应该删除矩形中的字符,如果没有,它应删除矩形本身...(如果选择了矩形)。
在我的情况下,我在矩形的编辑模式中选择了一些文本,但是当我按DEL而不是删除文本时,删除了矩形本身....
答案 0 :(得分:0)
确保表单的KeyPreview属性设置为False,这通常是表单的默认值。
如果你有KeyPreview=true
,可能的解决办法是检查活动控件并过滤表格对关键事件的处理:
protected override void OnKeyDown(KeyEventArgs e) {
if (ActiveControl.GetType() != typeof(TextBox)) {
base.OnKeyDown(e);
}
}