2012-02-05 49 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