2012-02-05 41 views
1

可能是一个简单的,有十几个文本框,每个包含一个字符。我试图处理删除键来清除当前文本框中的当前文本,然后我希望它通过去递减标签索引并返回编辑上一个文本框。我不知道如何引用当前文本框的标签索引并返回一个。去下一个我只是执行'TAB'的发送键。回去一个标签索引

我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}"); 

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

+0

Windows Form? WCF? Silverlight的? Web窗体? – balexandre 2012-02-05 08:27:49

+0

Windows窗体C#,.NET – ikathegreat 2012-02-05 08:29:04

+0

您是否尝试过{{SHIFT} {TAB}'?它确实感觉有点像黑客。必须有更好的方法。 – 2012-02-05 08:33:58

回答

2

你可以找到以前TextBoxGetNextControl方法:

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; 
} 

或者作为@Mr利斯特建议你可以发送SHIFT + TAB组合键:
SendKeys.Send("+{TAB}");但它是一个有点哈克的解决方案。

+0

是的“黑客”似乎好一点。对于你的解决方案,但关键的过程函数没有定义一个发件人或“e”....'保护覆盖布尔ProcessCmdKey(参考消息消息,密钥keyData) {}' – ikathegreat 2012-02-05 08:56:39

+0

这是不明确的问题,你正在使用'ProcessCmdKey'。有没有特别的理由使用它?因为从你所描述的''KeyDown''在每个'TextBox'上使用相同的处理器''也可以做到这一点。 – nemesv 2012-02-05 09:01:31