Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/64: Рейтинг темы: голосов - 64, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 15.12.2018
Сообщений: 38

Меню в консоли управляемое стрелками

07.11.2019, 13:40. Показов 12355. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как создать консольное меню в c#, которое управляется стрелками. Надо сделать через switch и for.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.11.2019, 13:40
Ответы с готовыми решениями:

Меню управляемое стрелками
Сделал меню управляемое стрелками через do_while, но меня это меню не очень устраивает так как при смещении стрелки вниз или вверх экран...

Реализовать управляемое стрелками меню
Здравствуйте. Я не очень опытный в плюсах, вообщем такая тема. Есть менюшка, управляется через стрелки на клавиатуре. Мне нужно вызвать...

Меню в консоли, управление стрелками
Подскажите пожалуйста, как сделать меню типа: пункт 1 пункт 2 и так далее Чтобы между пунктами можно было перемещаться курсором и...

5
 Аватар для Arthur Progy
251 / 167 / 94
Регистрация: 16.09.2019
Сообщений: 457
07.11.2019, 15:05
GgWinn3R,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/// <summary>
        /// Console menu with arrows
        /// </summary>
        /// <param name="startPos">Row index</param>
        /// <param name="count">Type count</param>
        /// <param name="arrow">Arrow string</param>
        /// <returns>Type</returns>
        public static int Checker(int startPos = 0, int count = 3, string arrow = "->")
        {
            string empty = new string(' ', arrow.Length);
            int i = startPos;
            Console.SetCursorPosition(0, startPos);
            Console.Write(arrow);
            ConsoleKeyInfo key;
            for(; ; )
            {
                key = Console.ReadKey(true);
                switch(key.Key)
                {
                    case ConsoleKey.DownArrow:
                        if(i == count + startPos - 1)
                            continue;
                        Console.SetCursorPosition(0, i);
                        Console.Write(empty);
                        Console.SetCursorPosition(0, ++i);
                        Console.Write(arrow);
                        break;
                    case ConsoleKey.UpArrow:
                        if(i == startPos)
                            continue;
                        Console.SetCursorPosition(0, i);
                        Console.Write(empty);
                        Console.SetCursorPosition(0, --i);
                        Console.Write(arrow);
                        break;
                    case ConsoleKey.Enter:
                        return i + 1 - startPos;
                }
            }
        }
0
0 / 0 / 0
Регистрация: 15.12.2018
Сообщений: 38
08.11.2019, 21:11  [ТС]
Arthur Progy,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
using System.Text;
using System;
using System.IO;
 
namespace Menu
{
    class Program
    {
        delegate void method();
        static void Main(string[] args)
        {
 
            string[] items = { "Создание файла", "Чтение из файла", "Сохранение в файл", "Сохранение в новый файл", "Переименование файла", "Удаление файла", "Выход" };
            method[] methods = new method[] { Method1, Method2, Method3, Method4, Method5, Method6, Exit };
            ConsoleMenu menu = new ConsoleMenu(items);
            int menuResult;
            do
            {
                menuResult = menu.PrintMenu();
                methods[menuResult]();
                Console.WriteLine("Для продолжения нажмите любую клавишу");
                Console.ReadKey();
            } while (menuResult != items.Length - 1);
        }
 
        static void Method1()
        {
            Console.WriteLine("Выбрано действие 'Создание файла' ");
 
            Console.WriteLine("Укажите путь к папке где хотите создать файл");
            try
            {
                string path = Console.ReadLine();
                File.Create(path);
                IsWellFormedOriginalString();
            }
            catch (Exception)
            {
            }
        }
 
        private static void IsWellFormedOriginalString()
        {
            throw new NotImplementedException();
        }
 
        static void Method2()
        {
            Console.WriteLine("Выбрано действие 'Чтение из файла' ");
 
            Console.WriteLine("Укажите путь к файлу котрый хотите открыть для чтения ");
            try
            {
                string path = Console.ReadLine();
                FileStream file1 = new FileStream(path, FileMode.Open);
                StreamReader reader = new StreamReader(file1);
                Console.WriteLine($"Текст из файла: {reader.ReadToEnd()}");
                reader.Close();
            }
            catch (Exception)
            {
                Console.WriteLine("Ошибка!");
            }
 
        }
        static void Method3()
        {
            Console.WriteLine("Выбрано действие 'Сохранение в файл' ");
 
            Console.WriteLine("Введите текст который хотите дозаписать");
            string text = Console.ReadLine();
            Console.WriteLine("Укажите путь к файлу который хотите дозаписать ");
            try
            {
                string path = Console.ReadLine();
                File.AppendAllText(path, text);
            }
            catch (Exception)
            {
                Console.WriteLine("Ошибка!");
            }
        }
        static void Method4()
        {
            Console.WriteLine("Выбрано действие 'Сохранение в новый файл' ");
 
            Console.WriteLine("Введите текст который хотите перезаписать");
            string text = Console.ReadLine();
            Console.WriteLine("Укажите путь к файлу котрый хотите перезаписать ");
            try
            {
                string path = Console.ReadLine();
                File.WriteAllText(path, text);
            }
            catch (Exception)
            {
                Console.WriteLine("Ошибка!");
            }
        }
        static void Method5()
        {
            Console.WriteLine("Выбрано действие 'Переименование файла' ");
 
            Console.WriteLine("Укажите путь к файлу котрый хотите перетменовать ");
            try
            {
                string path = Console.ReadLine();
                Console.WriteLine("Укажите путь к файлу и новое имя");
                string ath = Console.ReadLine();
                File.Move(path, ath);
            }
            catch (Exception)
            {
                Console.WriteLine("Ошибка!");
            }
        }
        static void Method6()
        {
            Console.WriteLine("Выбрано действие 'Удаление файла' ");
 
            Console.WriteLine("Укажите путь к файлу котрый хотите удалить ");
            try
            {
                string path = Console.ReadLine();
                File.Delete(path);
            }
            catch (Exception)
            {
                Console.WriteLine("Ошибка!");
            }
 
        }
        static void Exit()
        {
            Console.WriteLine("Приложение заканчивает работу!");
        }
    }
 
 
    class ConsoleMenu
    {
        string[] menuItems;
        int counter = 0;
        public ConsoleMenu(string[] menuItems)
        {
            this.menuItems = menuItems;
        }
 
        public int PrintMenu()
        {
            ConsoleKeyInfo key;
            do
            {
                Console.Clear();
                for (int i = 0; i < menuItems.Length; i++)
                {
                    if (counter == i)
                    {
                        Console.BackgroundColor = ConsoleColor.Cyan;
                        Console.ForegroundColor = ConsoleColor.Black;
                        Console.WriteLine(menuItems[i]);
                        Console.BackgroundColor = ConsoleColor.Black;
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                    else
                        Console.WriteLine(menuItems[i]);
 
                }
                key = Console.ReadKey();
                if (key.Key == ConsoleKey.UpArrow)
                {
                    counter--;
                    if (counter == -1) counter = menuItems.Length - 1;
                }
                if (key.Key == ConsoleKey.DownArrow)
                {
                    counter++;
                    if (counter == menuItems.Length) counter = 0;
                }
            }
            while (key.Key != ConsoleKey.Enter);
            return counter;
        }
 
    }
}
--------------------
а как сделать что то подобное через case
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
09.11.2019, 00:53
GgWinn3R, без соответствующих тегов, сия портянка не читабельна! При таком подходе к "помогающим", помогать желания чуть менее чем 0
З.Ы. почитай правила(есть подозрение, что это не последний "глас вопиющего в пустыне", а только начало) и их придерживайся! и всегда, ВСЕГДА обрамляй код тегами соответствующего языка
0
 Аватар для Arthur Progy
251 / 167 / 94
Регистрация: 16.09.2019
Сообщений: 457
09.11.2019, 09:51
GgWinn3R,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class ConsoleMenu
    {
        private string[] menuItems;
        private int counter = 0;
 
        public ConsoleMenu(string[] menuItems)
        {
            this.menuItems = menuItems;
        }
 
        public int PrintMenu()
        {
            ConsoleKeyInfo key;
            do
            {
                Console.Clear();
                for(int i = 0; i < menuItems.Length; i++)
                {
                    if(counter == i)
                    {
                        Console.BackgroundColor = ConsoleColor.Cyan;
                        Console.ForegroundColor = ConsoleColor.Black;
                        Console.WriteLine(menuItems[i]);
                        Console.BackgroundColor = ConsoleColor.Black;
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                    else
                        Console.WriteLine(menuItems[i]);
                }
 
                key = Console.ReadKey(true);
                switch(key.Key)
                {
                    case ConsoleKey.Enter:
                        return counter;
                    case ConsoleKey.UpArrow:
                        counter--;
                        if(counter == -1)
                            counter = menuItems.Length - 1;
                        break;
                    case ConsoleKey.DownArrow:
                        counter++;
                        if(counter == menuItems.Length)
                            counter = 0;
                        break;
                }
            }
            while(true);
        }
    }
Пссс, по секрету, очень плохой код.
0
Эксперт .NET
 Аватар для Rius
13121 / 7681 / 1675
Регистрация: 25.05.2015
Сообщений: 23,442
Записей в блоге: 14
09.11.2019, 10:08
Реализация меню в консоли
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2019, 10:08
Помогаю со студенческими работами здесь

Управление стрелками в консоли
Как сделать управление стрелками что-бы когда нажимаешь стрелочку выполнялось опридельоное действие вызавалась функция и тд.

Реализуйте на экране горизонтальное меню, управляемое мышью (pdcurses)
Реализуйте на экране горизонтальное меню, управляе- мое мышью. При выборе пунктов меню должны происходить какие-нибудь действия Как...

Навигация в консоли С++ стрелками и выбор подменю клавишей Ввода
Добрый день, столкнулся со следующей задачей (конечно больше для себя, но уже загорелся ею!) - есть консольное меню (скриншот). Хотелось...

Что-то не так в программе (при нажатии кнопок со стрелками по консоли движется символ)
Решил спустя некоторый промежуток времени попрактиковаться в c++. Написать программу, где при нажатии кнопок со стрелками по консоли...

Нужно написать меню, управляемое стрелочками. Есть код, но все пункты в ряд и не выбираются
Вот сам код, подскажите, пожалуйста, как правильно сделать чтоб можно было выбирать стрелочками и чтою пункты были в столбик. program...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru