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

Стрелочная навигация в консоли. Реально ли

04.01.2013, 00:49. Показов 9269. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уважаемые форумчане. Вот интересует вопрос - можно-ли сделать навигацию в консоли стрелками?
Как бы такую менюшку, которая управлялась бы стрелками ( вверх, вниз, влево, вправо )... То есть альтернатива текстовой навигации, которая реализуется через switch и case
Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.01.2013, 00:49
Ответы с готовыми решениями:

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

стрелочная функция и метод reduce
добрый день! Нашла интересный код, разбираюсь, что да как: <!doctype html> <html> <head> <meta...

Стрелочная функция три раза подряд
Скажите, что значат в этой функции next и action, похоже на то, что функция вызывает в себе еще две функции с аргументами next и action....

7
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
04.01.2013, 11:17
Да , на тебе мой очень старый проект. Все рабочее, разбирайся) Все методы по-удалял, оставил только нужное. Свои методы выбора пихай в switch(возвращается num из выбора). Вообще спрашивай , если что.

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
 
class Program
    {
        static string[] texts = new string[] { "Сделай выбор оперции, выбирай стрелками вниз-вверх, что бы поддтвердить нажми - Ентер\n",
                "1 : Поиск файла автоматически", "2 : Перебор папок вручную", "3 : Открытие текстового файла","4 : Выход" };
            static void Main(string[] args)
        {
            Console.SetWindowSize(110, 50);
            foreach (string text in texts)
                Console.WriteLine(text);
                int num = keys();//вызов менюшки 
                switch (num)
                {
                    case 1: { Console.WriteLine("выбор №1"); Console.ReadKey(); }; break;
                    case 2: { Console.WriteLine("выбор №2"); Console.ReadKey(); } break;
                    case 3: { Console.WriteLine("выбор №3"); Console.ReadKey(); } break;
                    case 4: { }; break;
                }
        }
            static void Text(int i)//Замена цвета менющки
                {
                    if (i==1)
                    {
                        Console.Clear();
                        Console.WriteLine(texts[0]);
                        Console.BackgroundColor = ConsoleColor.Blue;
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine(texts[1]);
                        Console.BackgroundColor = ConsoleColor.Black;
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(texts[2]);
                        Console.WriteLine(texts[3]);
                        Console.WriteLine(texts[4]);
                    }
                    if (i == 2)
                    {
                        Console.Clear();
                        Console.WriteLine(texts[0]);
                        Console.WriteLine(texts[1]);
                        Console.BackgroundColor = ConsoleColor.Blue;
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine(texts[2]);
                        Console.BackgroundColor = ConsoleColor.Black;
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(texts[3]);
                        Console.WriteLine(texts[4]);
                    }
                    if (i == 3)
                    {
                        Console.Clear();
                        Console.WriteLine(texts[0]);
                        Console.WriteLine(texts[1]);
                        Console.WriteLine(texts[2]);
                        Console.BackgroundColor = ConsoleColor.Blue;
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine(texts[3]);
                        Console.BackgroundColor = ConsoleColor.Black;
                        Console.ForegroundColor = ConsoleColor.Gray;
                        Console.WriteLine(texts[4]);
                    }
                    if (i == 4)
                    {
                        Console.Clear();
                        Console.WriteLine(texts[0]);
                        Console.WriteLine(texts[1]);
                        Console.WriteLine(texts[2]);
                        Console.WriteLine(texts[3]);
                        Console.BackgroundColor = ConsoleColor.Blue;
                        Console.ForegroundColor = ConsoleColor.Green;
                        Console.WriteLine(texts[4]);
                        Console.BackgroundColor = ConsoleColor.Black;
                        Console.ForegroundColor = ConsoleColor.Gray;
                    }
                }
            static int keys()//работа менюшки
            {
                int num = 0;
                bool flag=false;
                do
                {
                    ConsoleKeyInfo keyPushed = Console.ReadKey();
                    if (keyPushed.Key == ConsoleKey.DownArrow)
                    {
                        num++;
                        Text(num);
                    }
                    if (keyPushed.Key == ConsoleKey.UpArrow)
                    {
                        num--;
                        Text(num);
                    }
                    if (keyPushed.Key == ConsoleKey.Enter)
                    {
                        flag = true;
                    }
                    if (num == 0)
                    {
                        num = 4;
                        Text(4);
                    }
                    if (num == 5)
                    {
                        num = 1;
                        Text(1);
                    }
                }while(!flag);
                return num;
            }   
   }
2
1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 16
04.01.2013, 14:11  [ТС]
Спасибо. На днях разберусь Все таки начинает мне нравиться этот форум... за оперативные ответы
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.01.2013, 15:00
ITL, а без дублирования кода никак?
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
04.01.2013, 15:17
Psilon, фигня вопрос же
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static void Text(int i)
{
    Console.Clear();
    for(int n = 0; n < texts.Length; n++)
    {
        if(n == i)
            PrintColored(texts[n], ConsoleColor.Green, ConsoleColor.Blue)
        else
            Console.WriteLine(texts[n]);
}
 
static void PrintColored(string text, ConsoleColor foreground, ConsoleColor background)
{
    Console.BackgroundColor = background;
    Console.ForegroundColor = foreground;
    Console.WriteLine(text);
    Console.ResetColor();
}
3
 Аватар для ITL
284 / 255 / 73
Регистрация: 17.07.2012
Сообщений: 618
04.01.2013, 15:23
Цитата Сообщение от Psilon Посмотреть сообщение
ITL, а без дублирования кода никак?
Ну извините , что "не прибрался". Вроде же написал, что древний код.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.01.2013, 15:30
ITL, ясно, как-то проглядел

Yukikaze, ага, что-то в этом духе я и думал )
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
04.01.2013, 16:27
Давно хотел сделать консольное меню, вот наконец-то собрался с духом, принимайте
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
class Program
{
    static void Main(string[] args)
    {
        var elems = new[] { new Element("Google") { Command = GoogleCommandHandler},
            new Element("One"), 
            new Element("Test"), 
            new Element("    \nExit\n    "){ Command = ExitCommandHandler } };
        Menu menu = new Menu(elems);
        while (true)
        {
            menu.Draw();
            switch (Console.ReadKey(true).Key)
            {
                case ConsoleKey.UpArrow:
                    menu.SelectPrev();
                    break;
                case ConsoleKey.DownArrow:
                    menu.SelectNext();
                    break;
                case ConsoleKey.Enter: 
                    menu.ExecuteSelected();
                    break;
                default: return;
            }
        }
    }
 
    private static void GoogleCommandHandler()
    {
        Process.Start("http://www.google.ru/");
    }
 
    private static void ExitCommandHandler()
    {
        Environment.Exit(0);
    }
}
 
delegate void CommandHandler();
class Menu
{
    public Element[] Elements { get; set; }
    public int Index { get; set; }
 
    public Menu(Element[] elems)
    {
        this.Index = 0;
        this.Elements = elems;
        Elements[Index].IsSelected = true;
    }
 
    public void Draw()
    {
        Console.Clear();
        foreach (var element in Elements)
        {
            element.Print();
        }
    }
 
    public void SelectNext()
    {
        if (Index == Elements.Length - 1) return;
        Elements[Index].IsSelected = false;
        Elements[++Index].IsSelected = true;
    }
 
    public void SelectPrev()
    {
        if (Index == 0) return;
        Elements[Index].IsSelected = false;
        Elements[--Index].IsSelected = true;
    }
 
    public void ExecuteSelected()
    {
        Elements[Index].Execute();
    }
}
 
class Element
{
    public string Text { get; set; }
    public ConsoleColor SelectedForeColor { get; set; }
    public ConsoleColor SelectedBackColor { get; set; }
    public bool IsSelected { get; set; }
    public CommandHandler Command;
 
    public Element(string text)
    {
        this.Text = text;
        this.SelectedForeColor = ConsoleColor.Black;
        this.SelectedBackColor = ConsoleColor.Gray;
        this.IsSelected = false;
    }
 
    public void Print()
    {
        if (this.IsSelected)
        {
            Console.BackgroundColor = this.SelectedBackColor;
            Console.ForegroundColor = this.SelectedForeColor;
        }
        Console.WriteLine(this.Text);
        Console.ResetColor();
    }
 
    public void Execute()
    {
        if (Command == null) return;
        Command.Invoke();
    }
}
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2013, 16:27
Помогаю со студенческими работами здесь

Отобразить в консоли:увеличить и уменьшить длину массива на заданное ранее из консоли число
Доброго дня суток, исходный код и задача есть Подскажите пж, не получается реализовать некоторые операции в консоли:увеличить и уменьшить...

Как запустить программу из консоли без блокировки консоли?
Вводу например firefox в консоль открывается приложение и в консоль больше ничего ввести нельзя пока не закроешь приложение ...

Клавиши F1-F12 в консоли, и работа с мышкой в консоли
Я искал на сайте, но не нашел упоминания о том как обрабатывать и или узнавать где находится курсор мышки (и еще мне надо бы узнать нажатие...

Вызов консоли для другой вкладки из консоли js
Всем привет! Пишу скрипт для авто нажатия определенных элементов на сайте в определенной последовательности, чтобы в ручную не...

Возможно ли, работая в консоли хрома, сохранять информацию, помимо логов консоли (console.log), куда-нибудь ещё?
Всем, привет :) Подскажите пожалуйста, возможно ли на js, работая в консоли хрома, сохранять текстовую инфу по мимо логов консоли...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 09.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru