我有一个带有连接到AcceptButton
属性的按钮的表单,以便在用户按下Return键时出现逻辑并关闭表单。
在该表单上,我显示了当用户双击某个区域时出现的动态创建的TextBox
,然后在用户按下Return时隐藏。
当用户在TextBox
有焦点时按下Return键时,如何阻止表单处理按键操作?
我试图通过TextBox.KeyDown
在KeyEventArgs.Handled
事件处理程序中处理按键操作,但我的接受按钮的Button.Click
事件首先被触发...
答案 0 :(得分:14)
在TextBox具有焦点时重置表单AcceptButton
会起作用,我相信更合适的解决方案是使用TextBox AcceptsReturn
属性。
如果您设置
myTextBox.AcceptsReturn = true;
表格在按RETURN时不接受,但你的TextBox可以自己处理。
这样可以避免在代码中的多个位置重置AcceptButton。
答案 1 :(得分:11)
使用Enter
的{{1}}和Leave
个事件将TextBox
属性设置为AcceptButton
(在null
上)并重新将按钮分配给它(在Enter
上)。
答案 2 :(得分:4)
创建该文本框时将AcceptButton
属性设置为null,并在失去焦点时将其设置回正常值:
var myTextBox = new TextBox ... ;
AcceptButton = null;
myTextBox.Leave += (s, e) => { AcceptButton = btnOK; };
答案 3 :(得分:1)
要获得完整的工作示例,请将TextBox的AcceptReturn = true用作NobodysNightmare suggested,并将SuppressKeyPress设置为true,以避免将事件冒泡到Form。 要使用AcceptButton,当您输入/离开texbox为Fredrik Mörk suggested时,需要设置/重置AcceptButton属性。
var tb = new TextBox ...;
IButtonControl _oldAcceptButton = null;
tb.AcceptReturn=true;
tb.KeyDown += (s,e) => {
if(e.KeyCode==Keys.Enter) {
e.Handled=true;
//will not inform any parent controls about the event.
e.SuppressKeyPress=true;
//do your own logic
....
}
};
tb.Enter+=(s,e)=> {
_oldAcceptButton = AcceptButton;
AcceptButton = null;
};
tb.Leave+=(s,e)=>{
AcceptButton = _oldAcceptButton;
};