当前位置: 首页 > 编程语言 > C#

如何通过Tab键及时启用WinForm按钮获取焦点Share

时间:2023-04-10 17:37:50 C#

如何通过Tab键及时启用WinForm按钮获取焦点VisualStudio2010,C#我有一个ComboBoxwithDropDown,AutoCompleteset从ListItems到SuggestAppend、AutoCompleteSource。用户向其中键入数据,直到输入正确为止。如果数据与列表项之一匹配,组合框旁边的按钮将被禁用。如果用户按下Tab键,自动完成功能会接受当前建议。它还会移动到已启用选项卡序列中的下一个控件。当然,因为我希望它转到禁用按钮,所以我需要在验证条目后立即启用它。问题是我没有尝试过任何事件,PreviewKeyDown、LostFocus、SelectedIndexChanged可以让我及时启用按钮,以便处理它并获得焦点。它总是转到选项卡顺序中的下一个按钮,该按钮始终处于启用状态。我准备让按钮保持启用状态,如果按下得太快就会出错,但我不想这样做。我也不想进入特殊模式标志来跟踪这些控件何时获得焦点。身份验证似乎是正常的事情,但我被卡住了。如果SelectedIndexChanged在用户进行匹配时起作用,这很容易。当框被清除或找到类型匹配时,它不会触发。您可以创建自己的ComboBox类来封装此行为。像这样的东西:usingSystem;使用System.Windows.Forms;namespaceWindowsFormsApplication1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();this.myComboBox1.TheButton=this.button1;this.myComboBox1.Items.AddRange(newstring[]{"星期一","星期二","星期三","星期四","星期五","星期六","星期日"});button1.Enabled=false;}}publicclassMyComboBox:ComboBox{publicControlTheButton{get;放;}publicMyComboBox(){}boolIsValidItemSelected{get{returnnull!=this.SelectedItem;}}protectedoverridevoidOnValidated(EventArgse){if(null!=TheButton){TheButton.Enabled=this.IsValidItemSelected;TheButton.Focus();}base.OnValidated(e);}protectedoverridevoidOnTextChanged(EventArgse){if(null!=TheButton){TheButton.Enabled=this.IsValidItemSelected;}base.OnTextChanged(e);}}}试试这个:key_press事件:if(e.KeyData==Keys.Enter){button2.Enabled=true;按钮2.焦点();}而不是你提到的事件hanlders,(LostFocus、SelectedIndexChanged和PreviewKeyDown)使用组合框的“验证”事件来设置按钮的启用状态你可能还需要手动聚焦按钮以强制焦点移动到它。例如privatevoidcomboBox1_Validated(objectsender,EventArgse){button1.Enabled=true;button1.Focus();考虑到其他答案,我想出了一个不使用自动完成的部分Senario。副作用是PreviewKeyDown事件被第二次调用,因此验证被调用两次。我想知道为什么……也许我应该问另一个问题。privatevoidcomboBox1_PreviewKeyDown(objectsender,PreviewKeyDownEventArgse){if(e.KeyData==Keys.Tab){if(ValidationRoutine()){e.IsInputKey=true;//IfValidated,signalsKeyDowntoexaminethiskey}//副作用-当IsInputKey设置为true时调用此事件两次}}privatevoidcomboBox1_KeyDown(objectsender,KeyEventArgse){if(e.KeyData==Keys.Tab){e.SuppressKeyPress=true;//停止进一步处理TAB键btnEdit.Enabled=true;btnEdit.Focus();一旦使用None以外的任何设置打开AutoCompleteMode,将不再为Tab触发KeyDown事件并且键被静默吃掉。以上就是C#学习教程:如何通过Tab键及时启用WinForm按钮获取焦点分享的全部内容。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: