ConsoleMenu.cs 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace JR62THD_V2 {
  7. class ConsoleMenu {
  8. public List<ConsoleMenuItem> Items = new List<ConsoleMenuItem>();
  9. public ConsoleMenuItem SelectedItem = null;
  10. public void ShowMenu() {
  11. int left = Console.CursorLeft;
  12. int top = Console.CursorTop;
  13. var bgc = Console.BackgroundColor;
  14. var fgc = Console.ForegroundColor;
  15. foreach (var item in Items) {
  16. Console.SetCursorPosition(item.Left, item.Top);
  17. Console.BackgroundColor = item.BackgroundColor;
  18. Console.ForegroundColor = item.ForegroundColor;
  19. Console.Write(item.Text.PadRight(item.Length));
  20. }
  21. Console.SetCursorPosition(left, top);
  22. Console.BackgroundColor = bgc;
  23. Console.ForegroundColor = fgc;
  24. }
  25. public ConsoleKey[] AvallableKeys { get; set; } = new ConsoleKey[] { ConsoleKey.Enter };
  26. public char[] AvallableKeyChars { get; set; } = new char[] { };
  27. public int selectedIndex { get; set; } = 0;
  28. public ConsoleKeyInfo StartMenu() {
  29. int left = Console.CursorLeft;
  30. int top = Console.CursorTop;
  31. var bgc = Console.BackgroundColor;
  32. var fgc = Console.ForegroundColor;
  33. Console.CursorVisible = false;
  34. while (true) {
  35. if (selectedIndex < 0) selectedIndex = Items.Count - 1;
  36. selectedIndex %= Items.Count;
  37. SelectedItem = Items[selectedIndex];
  38. selectItem(selectedIndex);
  39. var k = Console.ReadKey(true);
  40. if (k.Key == ConsoleKey.UpArrow || k.Key == ConsoleKey.LeftArrow) {
  41. deSelectItem(selectedIndex);
  42. selectedIndex--;
  43. } else if (k.Key == ConsoleKey.DownArrow || k.Key == ConsoleKey.RightArrow) {
  44. deSelectItem(selectedIndex);
  45. selectedIndex++;
  46. } else if (AvallableKeys.Contains(k.Key) || AvallableKeyChars.Contains(k.KeyChar)) {
  47. Console.SetCursorPosition(left, top);
  48. Console.BackgroundColor = bgc;
  49. Console.ForegroundColor = fgc;
  50. Console.CursorVisible = true;
  51. return k;
  52. }
  53. }
  54. }
  55. void selectItem(int index) {
  56. var item = Items[index];
  57. Console.SetCursorPosition(item.Left, item.Top);
  58. Console.BackgroundColor = ConsoleColor.White;
  59. Console.ForegroundColor = ConsoleColor.Black;
  60. Console.Write(item.SelectedText.PadRight(item.Length));
  61. }
  62. void deSelectItem(int index) {
  63. var item = Items[index];
  64. Console.SetCursorPosition(item.Left, item.Top);
  65. Console.BackgroundColor = item.BackgroundColor;
  66. Console.ForegroundColor = item.ForegroundColor;
  67. Console.Write(item.Text.PadRight(item.Length));
  68. }
  69. }
  70. class ConsoleMenuItem {
  71. public int Top { get; set; }
  72. public int Left { get; set; }
  73. public int Length { get; set; }
  74. public string Text { get; set; }
  75. public string SelectedText { get;set; }
  76. public ConsoleColor BackgroundColor { get; set; } = ConsoleColor.DarkGray;
  77. public ConsoleColor ForegroundColor { get; set; } = ConsoleColor.White;
  78. public object Value { get; set; }
  79. }
  80. }