C# 返回一个选项卡索引

C# 返回一个选项卡索引,c#,textbox,tabs,keyboard,C#,Textbox,Tabs,Keyboard,可能很简单,有十几个文本框,每个文本框包含一个字符。我正在尝试处理delete键以清除当前文本框中的当前文本,然后我希望它通过go减少选项卡索引,并返回编辑上一个文本框。我不知道如何引用当前文本框的选项卡索引并返回一个。要转到下一个,我只需执行“TAB”的send键 在我的keyprocess功能中,我有: //DEL goes back one text box and clears it if (keyData == (Keys.Delete))

可能很简单,有十几个文本框,每个文本框包含一个字符。我正在尝试处理delete键以清除当前文本框中的当前文本,然后我希望它通过go减少选项卡索引,并返回编辑上一个文本框。我不知道如何引用当前文本框的选项卡索引并返回一个。要转到下一个,我只需执行“TAB”的send键

在我的keyprocess功能中,我有:

//DEL goes back one text box and clears it
            if (keyData == (Keys.Delete))
            {
                //Clear textbox
                //Go back one textbox to edit
                return true;
            }
在编辑完要发送的文本框后,再次发送:

 SendKeys.Send("{TAB}");

也许有更好的方法可以做到这一点。

您可以使用以下方法找到前面的
文本框:

或者,正如@Mr Lister所建议的,您可以通过以下方式发送SHIFT+TAB组合键:

SendKeys.Send(“+{TAB}”)但这是一个有点粗糙的解决方案。

Windows窗体?WCF?银灯?Web表单?您是否尝试过
{SHIFT}{TAB}
?不过,这确实有点像黑客。肯定有更好的办法。是的,“黑客”似乎没什么好的。对于您的解决方案,但key process函数未定义发件人或“e”…
protectedoverride bool ProcessCmdKey(ref Message msg,Keys keyData){}
从您的问题中不清楚您使用的是
ProcessCmdKey
。使用它有什么特别的原因吗?因为根据您所描述的,在每个
TextBox
上使用相同的处理程序在
KeyDown
上订阅也会起到作用。
if (e.KeyCode == Keys.Delete)
{
    var textBox = ((TextBox) sender);
    textBox.Text = string.Empty;

    var previous = textBox.Parent.GetNextControl(textBox, false);
    if (previous != null)
        previous.Focus();

    e.Handled = true;
}