2012-04-14 7 views
0

KeyDownイベントを独立したサブプロシージャから参照し、元の独立したサブプロシージャにループバックさせようとしています。Key Downイベント(VB.NET)から元のSubプロシージャに戻る方法

  1. は、独立したサブの手順でオフを開始する(DisplayAction - その後のKeyDownイベントを呼び出し)
  2. がKeyDownイベントに入る(のKeyDown次いでDisplayActionを呼び出し)
  3. 元のサブ手順(DisplayAction)に入り、ループが継続。

*手順1と2は自分のコードで正常に動作します。ステップ3が問題です。私のプログラムは、独立したサブプロシージャにループバックしません。

Public Class frmMain 
    Dim RandomNumber As Integer 
    Dim RandomNumbers(1000) As Integer 
    Dim intAction As Integer 
    Dim strAction1 As String = "A" 
    Dim strAction2 As String = "B" 
    Dim strAction3 As String = "C" 
    Dim strAction4 As String = "D" 
    Dim i As Integer 

    Private Sub frmMain_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
     FormLoad(sender, e) 
    End Sub 

    Private Sub FormLoad(sender, e) 

    'Creates random numbers here      
     DisplayAction(sender, e) 
    End Sub 

    Public Sub DisplayAction(sender, e) 

     For i As Integer = 0 To 3 
      Select Case lstRandom.Items(i) 
       Case 1 
        lblDisplay.Text = strAction1 
        intAction = 1 
        frmMain_KeyDown(Sender, intAction = 1) 
       Case 2 
        lblDisplay.Text = strAction2 
        intAction = 2 
        frmMain_KeyDown(sender, intAction = 2) 
       Case 3 
        lblDisplay.Text = strAction3 
        intAction = 3 
        frmMain_KeyDown(sender, intAction = 3) 
       Case 4 
        lblDisplay.Text = strAction4 
        intAction = 4 
        frmMain_KeyDown(sender, intAction = 4) 
      End Select 
     Next i 

    End Sub 

    Private Sub frmMain_KeyDown(sender, e) Handles Me.KeyDown 


     If intAction = 1 Then 
      lblDisplay.Text = "works! 1" 
      Call DisplayAction(sender, e) 

     ElseIf intAction = 2 Then 
      lblDisplay.Text = "works! 2" 
      Call DisplayAction(sender, e) 

     ElseIf intAction = 3 Then 
      lblDisplay.Text = "works! 3" 
      DisplayAction(sender, e) 

     ElseIf intAction = 4 Then 
      lblDisplay.Text = "works! 4" 
      DisplayAction(sender, e) 

     End If 

    End Sub 
End Class 

答えて

5

自動です!別のメソッドを呼び出してメソッドが実行を終了すると、コントロールが自動的に呼び出し元に返されます。また、sendere、およびとしてください。Option Strict Onを投げてください。

Public Class frmMain 
    Dim RandomNumber As Integer 
    Dim RandomNumbers(1000) As Integer 
    Dim intAction As Integer 
    Dim strAction1 As String = "A" 
    Dim strAction2 As String = "B" 
    Dim strAction3 As String = "C" 
    Dim strAction4 As String = "D" 

    Private Sub frmMain_Load(sender As Object, e As System.EventArgs) Handles Me.Load 
     FormLoad() 
    End Sub 

    Private Sub FormLoad() 
     'Creates random numbers here      
     DisplayAction() 
    End Sub 

    Public Sub DisplayAction() 
     For i As Integer = 0 To 3 
      Select Case lstRandom.Items(i) 
       Case 1 
        lblDisplay.Text = strAction1 
        intAction = 1 
        frmMain_KeyDown(Me, EventArgs.Empty) 
       Case 2 
        lblDisplay.Text = strAction2 
        intAction = 2 
        frmMain_KeyDown(Me, EventArgs.Empty) 
       Case 3 
        lblDisplay.Text = strAction3 
        intAction = 3 
        frmMain_KeyDown(Me, EventArgs.Empty) 
       Case 4 
        lblDisplay.Text = strAction4 
        intAction = 4 
        frmMain_KeyDown(Me, EventArgs.Empty) 
      End Select 
     Next 
    End Sub 

    Private Sub frmMain_KeyDown(ByVal sender As Object, ByVal e As EventArgs) Handles Me.KeyDown 
     lblDisplay.Text = "works! " & intAction 
    End Sub 
End Class 
+0

+1。また、イベントの引数が決して*必要でない場合は、メソッドのシグネチャを単純化するためにそれらを残しておくこともできます。プライベートサブfrmMain_Load()は、Me.Loadを処理します。プライベートサブfrmMain_KeyDown()はMe.KeyDownを処理します – MarkJ

関連する問題