我有这段代码:
this.searchInput.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.inputKeypress); private void Keypress(object sender, KeyPressEventArgs e) { // If Tab has been pressed if(122 == (int)e.KeyChar) { switchTab(sTab); MessageBox.Show(sTab); } }
它的作用是将焦点设置为另一个元素。 但是,当焦点设置为TextBox,并且我按TAB时,它只是在TextBox中创建一个选项卡,并且不会将焦点设置在下一个元素上。
任何人都知道如何才能完成这项工作?
我试过设置e.Handled = true;但那没用......
答案 0 :(得分:4)
您是否尝试在AcceptsTab
上设置TextBox
至false
?
编辑:
是的。这是行不通的。奇怪......它仍然在文本框中列表
这没什么意义。我运行了一个小型测试应用,当TextBox
和 AcceptsTab
属性Multiline
时,标签键只会将焦点从true
移开,无论为KeyPress
定义事件处理程序。
您确定其他一些代码未将AcceptsTab
设置为true
吗?如果是,是否将Multiline
设置为false
会更改标签行为?你能发布更多相关代码吗?
答案 1 :(得分:3)
将文本框的AcceptsTab
属性设置为false
?
答案 2 :(得分:0)
您需要像这样创建控件的实例,并覆盖以下方法:
using System.Windows.Forms
//optional namespace
public class NoTabTextBox : TextBox
{
protected override bool IsInputKey(Keys keyData)
{
switch (keyData)
{
case Keys.Tab:
return true;
}
return base.IsInputKey(keyData);
}
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Tab) { e.Handled = true; e.SuppressKeyPress = true; }
base.OnKeyDown(e);
}
}
构建解决方案,然后通过在工具箱中的用户控件下找到它,将常规TextBox替换为新的'NoTabTextBox'。
这将捕获Tab键并强制它不执行任何操作。