2012-07-30 99 views
0

我遇到了這種情況下的問題(請參閱標題)。我在一個大面板中有6個子面板。我做了一個從主文本框繼承的TextBox類。我正在嘗試使用KeyPressed事件處理程序來處理Enter鍵。當用戶按下輸入鍵時,它將從子面板內的一個文本框移動到下一個子面板。到目前爲止,我已經獲得了輸入關鍵事件處理程序,可以用於重點不在跳到下一個面板的面板。TextBox Enter Key - 主面板中的子面板

下面是我用來控制動作的子程序。 問題是我無法從一個子面板跳到另一個面板。任何幫助,將不勝感激!

Protected Shared Sub NextControl(ByVal tControl As Control, ByVal Direction As Boolean) 

    Dim pControl As Control = tControl.TopLevelControl 
    tControl = pControl.GetNextControl(tControl, Direction) 

    If Direction = False Then 
     Dim tParent As Control 
     While TypeOf tControl Is UserControl 
      tParent = tControl.Parent 
      tControl = pControl.GetNextControl(tControl, Direction) 
      If tControl.Parent Is tParent Then 
       Exit While 
      End If 
     End While 
    End If 

    If tBox_P00.ControlNesting > 0 Then 
     'Dim i As Integer 
     pControl = tControl.Parent 
     For i As Integer = 0 To tBox_P00.ControlNesting - 2 
      pControl = pControl.Parent 
     Next 
    End If 

    If Not tControl Is Nothing Then 
     Do Until (tControl.TabStop = True) AndAlso (tControl.Enabled = True) AndAlso (tControl.Visible = True) AndAlso (TypeOf tControl Is Tbx00) 

      tControl = pControl.GetNextControl(tControl, Direction) 

      'Last in the Panel 
      If tControl Is Nothing Then 

       tBox_P00.Select(0, tBox_P00.TextLength) 
       Beep() 
       Exit Sub 

      End If 
     Loop 
     tControl.Focus() 
    Else 
     tBox_P00.Select(0, tBox_P00.TextLength) 
     Beep() 
    End If 

    Exit Sub 
End Sub 
+0

我沒有看到問題。究竟出了什麼問題? – 2012-07-30 18:13:03

+0

該代碼中循環的意圖很不明確。只需調用GetNextControl()一次,不要做任何事情。 – 2012-07-30 18:22:26

+0

子面板內至少有10個其他文本框。該循環將過濾掉未輸入的輸入。所以循環實際上看起來並試圖找到下一個輸入框。 – jsit208 2012-07-30 18:33:16

回答

0

這聽起來好像你正在複雜的事情。正如HansPassant提到你可以使用GetNextControl做的工作適合你:

此代碼將焦點移到下一個文本框的形式(based on tab index order)進入被按下時:

Private Sub TextBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown 
    If e.KeyCode = Keys.Enter Then 
     Dim ctl As Control = CType(sender, Control) 
     Do 
      ctl = Me.GetNextControl(ctl, True) 
     Loop Until TypeOf ctl Is TextBox 
     ctl.Focus() 
    End If 
End Sub 

然後,您可以擴大這處理所有文本框的KeyDown事件。