C# 防止WinForm AcceptButton处理返回键
我有一个表单,它有一个连接到C# 防止WinForm AcceptButton处理返回键,c#,winforms,C#,Winforms,我有一个表单,它有一个连接到AcceptButton属性的按钮,这样当用户按下Return键时,就会出现逻辑并关闭表单 在该表单上,我显示了一个动态创建的文本框,当用户双击某个区域时显示该文本框,然后在用户按Return时隐藏该文本框 当文本框有焦点时,当用户按下Return键时,如何防止表单处理按键 我试图说按键是在文本框中处理的。KeyDown事件处理程序通过KeyEventArgs.handled但是按钮被处理。单击我的accept按钮的事件首先被触发…使用文本框的Enter和Leave事
AcceptButton
属性的按钮,这样当用户按下Return键时,就会出现逻辑并关闭表单
在该表单上,我显示了一个动态创建的文本框
,当用户双击某个区域时显示该文本框,然后在用户按Return时隐藏该文本框
当文本框有焦点时,当用户按下Return键时,如何防止表单处理按键
我试图说按键是在文本框中处理的。KeyDown
事件处理程序通过KeyEventArgs.handled
但是按钮被处理。单击我的accept按钮的事件首先被触发…使用文本框的Enter
和Leave
事件来设置AcceptButton
属性设置为null
(在输入
)并将按钮重新分配给它(在离开
)。创建该文本框时,将AcceptButton
属性设置为null,并在失去焦点时将其设置回正常值:
var myTextBox = new TextBox ... ;
AcceptButton = null;
myTextBox.Leave += (s, e) => { AcceptButton = btnOK; };
在文本框有焦点时重置表单AcceptButton
会起作用,我认为更合适的解决方案是使用textboxsAcceptsReturn
属性
如果你设定
myTextBox.AcceptsReturn = true;
按RETURN键时表单将不接受,但您的文本框可以自行处理
这将避免在代码中的多个位置重置AcceptButton。要获得完整的工作示例,请使用文本框a的AcceptReturn=true,并将SuppressKeyPress设置为true,以避免将事件冒泡到表单中。
要使用AcceptButton,您需要在输入/离开文本框时设置/重置AcceptButton属性
这么多更好、更优雅的解决方案,+1!只有当文本框的“Multiline”属性为真时,此解决方案才会起作用。这是显而易见的,但我们总是不确定这是否是解决方法。@Samuel:因为你在我发布我的以下内容后发表了评论:这不是要做的,因为不需要解决方法。我知道这是一种方法,但不是方法^^
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;
};