我想在开始时制作一个涉及菜单的程序,但不是使用典型的选择案例,而是希望以不同方式进行。
我希望它为用户提供一些选项,然后他们会使用箭头键在选项旁边移动一个小箭头。
最后按Enter键,然后您将前进到您选择的下一个屏幕。我一直在网上搜索,但我只能在表单模式中找到这种东西,而不是控制台。如果这不可能,请告诉我,我将不胜感激。
答案 0 :(得分:0)
一种简单的方法是使用菜单类打印菜单并突出显示传递给它的项目编号:
Class Menu
Private MenuList As New List(Of String)
Public ReadOnly Property LineCount As Integer
Get
Return MenuList.Count
End Get
End Property
Public Sub CreateNewMenu(strings As IEnumerable(Of String))
MenuList.Clear()
For Each s In strings
MenuList.Add(s)
Next
End Sub
Public Sub PrintMenu(highlight As Integer)
If highlight < 0 OrElse highlight > MenuList.Count - 1 Then
Throw New Exception("Invalid menu index")
End If
For I = 0 To MenuList.Count - 1
If I = highlight Then
SwapColors()
Console.WriteLine(MenuList(I))
Console.ResetColor()
Else
Console.WriteLine(MenuList(I))
End If
Next
End Sub
Private Sub SwapColors()
Dim temp = Console.BackgroundColor
Console.BackgroundColor = Console.ForegroundColor
Console.ForegroundColor = temp
End Sub
End Class
使用它看起来像这样:
Dim MainMenu As New Menu
MainMenu.CreateNewMenu(
{
"Option A",
"Option B",
"Option C"
})
Dim CurrentItem As Integer = 0
Dim CurrentKey As ConsoleKey
While CurrentKey <> ConsoleKey.Enter
Console.Clear()
MainMenu.PrintMenu(CurrentItem)
CurrentKey = Console.ReadKey(True).Key
If CurrentKey = ConsoleKey.UpArrow Then
CurrentItem -= 1
ElseIf CurrentKey = ConsoleKey.DownArrow Then
CurrentItem += 1
End If
CurrentItem = (CurrentItem + MainMenu.LineCount) Mod MainMenu.LineCount
End While
这将使用反色突出显示所选项目,但如果需要,可以在将项目写入控制台时轻松更改以添加指示符。
当while循环退出CurrentItem
时,将保留所选菜单项的从0开始的索引。
这种方法的一个优点是您可以拥有多个菜单集合,这些菜单允许您根据选择显示特定的菜单。