2013-03-27 99 views
0

我遇到了我的代碼問題。Visual Basic:我如何同時運行2個循環?

我試圖讓菜單屏幕上的選項閃爍圖標兩側,以表示用戶當前所做的選擇。問題是我希望能夠同時閃爍光標並讀取用戶輸入移動光標位置的按鍵。有沒有一種方法可以做到這一點,或者比我目前的設置更簡單。

任何幫助非常感謝,因爲我還在學習,謝謝。

Sub Main() 
    Dim KeyPressed As String 
    Dim Pos As Integer 
    Dim MenuSelection As Integer = 1 
    PreStuff() 
    DisplayMenu() 
    Cursor(MenuSelection, False) 
    Do 
     KeyPressed = GetKeyPressed() 
     If KeyPressed = "ConsoleKey.DownArrow" And Pos = 1 Then 
      MenuSelection = 2 
     ElseIf KeyPressed = "ConsoleKey.DownArrow" And Pos = 2 Then 
      MenuSelection = 1 
     ElseIf KeyPressed = "ConsoleKey.UpArrow" And Pos = 1 Then 
      MenuSelection = 2 
     ElseIf KeyPressed = "ConsoleKey.UpArrow" And Pos = 2 Then 
      MenuSelection = 1 
     End If 
    Loop Until KeyPressed = "ConsoleKey.Enter" 
    Cursor(0, True) 
End Sub 

Sub PreStuff() 
    Console.Title = "Populatio - Pre Alpha" 
    Console.SetWindowSize(80, 25) 
    Console.CursorVisible = False 
End Sub 

Function GetKeyPressed() 
    Dim KeyChoice As String 
    KeyChoice = Console.ReadKey().ToString 
    Return KeyChoice 
End Function 


Sub Cursor(ByVal Op As Integer, ByVal State As Boolean) 
    Do 
     Select Case Op 
      Case 1 And State = False 
       Console.SetCursorPosition(32, 5) 
       Console.Write("►") 
       Console.SetCursorPosition(43, 5) 
       Console.Write("◄") 
       State = True 
      Case 1 And State = True 
       Console.SetCursorPosition(32, 5) 
       Console.Write(" ") 
       Console.SetCursorPosition(43, 5) 
       Console.Write(" ") 
       State = False 
      Case 2 And State = False 
       Console.SetCursorPosition(34, 7) 
       Console.Write("►") 
       Console.SetCursorPosition(41, 7) 
       Console.Write("◄") 
       State = True 
      Case 2 And State = True 
       Console.SetCursorPosition(34, 7) 
       Console.Write(" ") 
       Console.SetCursorPosition(41, 7) 
       Console.Write(" ") 
       State = False 
     End Select 
     System.Threading.Thread.Sleep(500) 
    Loop Until Op = 0 
    Console.SetCursorPosition(32, 5) 
    Console.Write(" ") 
    Console.SetCursorPosition(43, 5) 
    Console.Write(" ") 
    Console.SetCursorPosition(34, 7) 
    Console.Write(" ") 
    Console.SetCursorPosition(41, 7) 
    Console.Write(" ") 
End Sub 

Sub DisplayMenu() 
    Console.WriteLine("╔═════════════════════════════════════════════════════════════════════════════╗") 
    Console.WriteLine("║       Populatio! By Alx        ║") 
    Console.WriteLine("╠═════════════════════════════════════════════════════════════════════════════╣") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║         New Game         ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║         Exit          ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.WriteLine("║                    ║") 
    Console.Write("╚═════════════════════════════════════════════════════════════════════════════╝") 
End Sub 
+0

凡在'待辦事項Loop'呢'Op'爲了在'Op = 0'時終止而改變? – ja72 2013-03-27 17:33:12

+0

我認爲限制是用'Console.ReadKey()'來暫停執行,直到讀取一個鍵。不幸的是,我沒有解決方法。 – ja72 2013-03-27 17:54:08

+0

幫你一個忙,把Option Strict On放在代碼的頂部,或者把它設置在項目屬性中。一些函數定義甚至沒有指定返回類型。 – 2013-03-27 20:03:40

回答

0

雖然多線程也許前進的道路爲布拉德說,你也許能達到你想要的DoEvent方法,告訴系統有哪些繼續處理其他事件。

嘗試之前

Loop Until KeyPressed = "ConsoleKey.Enter" 

堅持的DoEvents這將使光標方法再次運行這樣的循環將成爲...

Do 
    KeyPressed = GetKeyPressed() 
    If KeyPressed = "ConsoleKey.DownArrow" And Pos = 1 Then 
     MenuSelection = 2 
    ElseIf KeyPressed = "ConsoleKey.DownArrow" And Pos = 2 Then 
     MenuSelection = 1 
    ElseIf KeyPressed = "ConsoleKey.UpArrow" And Pos = 1 Then 
     MenuSelection = 2 
    ElseIf KeyPressed = "ConsoleKey.UpArrow" And Pos = 2 Then 
     MenuSelection = 1 
    End If 
    DoEvents 
Loop Until KeyPressed = "ConsoleKey.Enter"