2011-12-26 33 views
3

在我的C#Windows窗體應用程序我有一個窗體中的用戶輸入數據要保存在數據庫中的許多TextBox控件。我希望用戶能夠通過向上和向下的箭頭改變焦點到每個這些文本框。我可以爲向下箭頭做,所以當用戶按下箭頭焦點設置爲更高的tabindex通過SendKey(「Tab」)的文本框。但我不能這樣做的UP箭頭,所以當用戶按向上箭頭焦點設置爲較低tabindex的文本框,請任何幫助?如何發送焦點來控制tabindex低於C#窗體窗體應用程序中的當前控件?

+2

請問您可以發佈更改**向下箭頭(工作)**和**向上箭頭(不工作)**的代碼焦點的代碼。然後,我們可以嘗試弄清*爲什麼*後者不起作用 – Adam

+0

如果您可以爲向下箭頭操作,您應該可以使用向上箭頭來操作。聽起來就像您必須單獨設置所有選項卡索引正確..也如果我沒有記錯.. C#GUI的行爲有趣,當你放棄/分配選項卡索引的控制不順序..或者它的ASP.NET應用程序我有一個類似的問題..但是顯示什麼代碼/關鍵事件您試圖在 – MethodMan

+1

上捕獲此信息,但這不會有幫助,但使用UP/DOWN更改焦點通常不是一個好主意。例如,對於單行文本框,UP/DOWN用作LEFT/RIGHT,所以我不建議將行爲更改爲TAB。 – ken2k

回答

9

而不是使用SendKey(),您可以使用Control.SelectNextControl(),並使用forward=false倒退。

4

你可以嘗試像SendKeys.Send("+{TAB}");這將模擬Shift鍵+ Tab鍵所以應該把你帶回

4

在文本框之間移動的最佳方式是使用 Control.SelectNextControl +轉發參數。

檢查下面的代碼,每次用戶按向下鍵在窗體上,下控制被激活:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     Control ctl; 
     ctl = (Control)sender; 
     if (e.KeyCode == Keys.Down) 
     { 
      ctl.SelectNextControl(ActiveControl, true, true, true, true); 
     } 
     else if (e.KeyCode == Keys.Up) 
     { 
      ctl.SelectNextControl(ActiveControl, false, true, true, true); 
     } 
    } 

不要忘了設定的KeyPreview的形式來實現。

+0

只需注意:要使用此表單的「KeyPress」必須設置爲「true」:) – Jack

相關問題