1 / 1 / 0
Регистрация: 13.12.2012
Сообщений: 16

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

04.01.2013, 00:49. Показов 9331. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru