Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/35: Рейтинг темы: голосов - 35, средняя оценка - 4.97
 Аватар для RallinaGirl
11 / 11 / 2
Регистрация: 21.11.2011
Сообщений: 69

Курсор на строке в меню консольного приложения

25.12.2011, 19:03. Показов 7083. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Guys, please help me with creating cursor in the Main Menu. Мальчики, помогите пожалуйста мне с созданием курсора в области меню. К примеру я создала меню с помощью switch(k) и чтоб там пользователь мог выбирать команды => стрелками вверх, вниз движение курсора за пределами меню и при нажатии Enter выбирание данной команды.
Вид курсора: " => "

Образный вид:

=> * создание случайных чисел для одномерного массива
* создание случайных чисел для двумерного массива
* вывод всех массивов на экран консоли
* создать IO stream
* выход из консольного приложения

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

* создание случайных чисел для одномерного массива
=> * создание случайных чисел для двумерного массива
* вывод всех массивов на экран консоли
* создать IO stream
* выход из консольного приложения

Спасибо, кто поможет
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.12.2011, 19:03
Ответы с готовыми решениями:

Простенькое графическое меню для консольного приложения DOS
помогите реализовать простенькое графическое меню для консольного приложения DOS

Выбор пункта меню консольного приложения нажатием клавиши
Все мы привыкли делать меню, вот так: int Получатель_числа_ввода_от_пользователя; Console.WriteLine("\t\t\t Меню...

Разработка консольного приложения средствами DevC++. Формирование пользовательского текстового меню
на фото есть таблица с фамилиями... мне нужна работа Васильевой Анастасии, а конкретно написать код. Спасибо.

10
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
25.12.2011, 19:29
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
static readonly string arrow = "=> ";
static readonly string[] menuItems =
{
    "* создание случайных чисел для одномерного массива",
    "* создание случайных чисел для двумерного массива",
    "* вывод всех массивов на экран консоли",
    "* создать IO stream",
    "* выход из консольного приложения"
};
 
static void PrintMenu(int choice)
{
    Console.Clear();
    for (int i = 0; i < menuItems.Length; ++i)
    {
        if (i == choice)
            Console.Write(arrow);
        Console.WriteLine(menuItems[i]);
    }
}
 
static int Menu()
{
    Console.CursorVisible = false;
    int choice = 0;
    while (true)
    {
        PrintMenu(choice);
        switch (Console.ReadKey(true).Key)
        {
            case ConsoleKey.UpArrow:
                if (choice != 0)
                    --choice;
                break;
            case ConsoleKey.DownArrow:
                if (choice != menuItems.Length - 1)
                    ++choice;
                break;
            case ConsoleKey.Enter:
                Console.CursorVisible = true;
                return choice;
        }
    }
}
Логика этого механизма такая, что достаточно вызвать метод Menu и сохранить возвращаемое им значение - это и будет номер выбранного пункта.
2
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
25.12.2011, 19:37
Мой вариант
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 2;
            bool[] activeMenuIndex = new bool[5];
            Console.WriteLine("Используйте стрелки вверх, вниз для перемешения по пунктам меню");
            Console.WriteLine("---------------------------------------------------------------");
            Console.WriteLine("   * создание случайных чисел для одномерного массива");
            Console.WriteLine("   * создание случайных чисел для двумерного массива");
            Console.WriteLine("   * вывод всех массивов на экран консоли");
            Console.WriteLine("   * создать IO stream");
            Console.WriteLine("   * выход из консольного приложения");
            Console.SetCursorPosition(0, i);
            Console.Write("=>");
            ConsoleKey key = Console.ReadKey().Key;
            while (key != ConsoleKey.Escape)
            {
                Console.SetCursorPosition(0, 8);
                switch (key)
                {
                    case ConsoleKey.UpArrow:
                        {
                            if (i > 2)
                            {
                                i--;
                                Console.SetCursorPosition(0, i);
                                Console.Write("=>");
                                Console.SetCursorPosition(0, i+1);
                                Console.Write("  ");
                            }
                                break;
 
                        }
                    case ConsoleKey.DownArrow:
                        {
                            if (i < 6)
                            {
                                i++;
                                Console.SetCursorPosition(0, i);
                                Console.Write("=>");
                                Console.SetCursorPosition(0, i - 1);
                                Console.Write("  ");
                            }
                            break;
 
                        }
                        
                }
                
                key = Console.ReadKey().Key;
            }
            Console.ReadLine();
        }
    }
}
2
 Аватар для RallinaGirl
11 / 11 / 2
Регистрация: 21.11.2011
Сообщений: 69
25.12.2011, 19:42  [ТС]
Blood-Angel, Я очень заинтересовалась вот этим: readonly, это типа блокировка ограничителя возможности индекса, вакуума циркулярности ?
1
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
25.12.2011, 19:46
Это значит, что эта строка только для чтения.
0
 Аватар для RallinaGirl
11 / 11 / 2
Регистрация: 21.11.2011
Сообщений: 69
25.12.2011, 19:48  [ТС]
Rockedit, что-то не заметила, простите.
0
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
25.12.2011, 20:09
В своей программе я использовал установку позиции вывода.
C#
1
Console.SetCursorPosition(0, i);
Нажимаем вверх, переходим на строку выше, если она не самая верхняя, аналогично с перемещением вниз.
0
 Аватар для RallinaGirl
11 / 11 / 2
Регистрация: 21.11.2011
Сообщений: 69
25.12.2011, 20:09  [ТС]
Пока что вот так сделала. А как можно сделать, чтобы приветствие оставалось ? А то все очищается...
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
using System;
#region Main
class Program{
    static readonly string _cursor = "=> ";
    static readonly string[] _menuitems = {
        "* Creating random numbers for the one-dimensional array.",
        "* Creating random numbers for the two-dimensional array.",};
    protected static void Main(){ // Main
        Console.Title = "Console Application Menu";
        Console.CursorVisible = false;
        Specifications();
        Menu();
        Console.ReadKey();}
    private static void Specifications(){ // Specifications
        Console.ForegroundColor = ConsoleColor.Green; DateTime _d_t = new DateTime();
        Console.WriteLine("\t\t\t     " + _d_t.Date.ToUniversalTime());
        int _n = 0; int[,] _i = new int[_n, _n];
        Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine(new string('_', 80));
        Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\t\t\t  CONSOLE APPLICATION MENU"); Console.WriteLine();
        Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine(new string('_', 80));}
    private static void MenuPrint(int i_choice){ // MenuPrint
        Console.Clear();
        for (int i = 0; i < _menuitems.Length; i++) {
            if (i == i_choice){
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write(_cursor);
                Console.ForegroundColor = ConsoleColor.DarkGreen;}
            Console.WriteLine(_menuitems[i]);}}
    private static int Menu(){
        int choice = 0;
        while (true){
            MenuPrint(choice);
            switch (Console.ReadKey().Key){
                case ConsoleKey.UpArrow:
                    if (choice != 0)
                        --choice;
                    break;
                case ConsoleKey.DownArrow:
                    if(choice != _menuitems.Length - 1)
                        ++choice;
                    break;
                case ConsoleKey.Enter:
                    Console.CursorVisible = true;
                    return choice;}}}}
#endregion
2
Автор FAQ
Автор FAQ
 Аватар для Rockedit
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
25.12.2011, 20:14
так как у меня. у меня не выводится все заново, а подменяется нужная часть
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
25.12.2011, 20:16
Цитата Сообщение от RallinaGirl Посмотреть сообщение
protected static void Main()
Это что за фен-шуйный модификатор? И вообще, в коде нажимаем Ctrl+E, а потом Ctrl+D и радуемся жизни.

А чтобы остался заголовок, необходимо 11-ую строку вставить после 22-ой, а саму 11-ую убрать.
0
 Аватар для RallinaGirl
11 / 11 / 2
Регистрация: 21.11.2011
Сообщений: 69
25.12.2011, 20:29  [ТС]
Blood-Angel, Ух ты, я рада. Посмотри, как получилось красиво у меня:

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
using System;
#region Main
class Program{
    static readonly string _cursor = "=> ";
    static readonly string[] _menuitems = {
        "* Creating random numbers for the one-dimensional array.",
        "* Creating random numbers for the two-dimensional array.",};
    protected static void Main(){ // Main
        Console.Title = "Console Application Menu";
        Console.CursorVisible = false;
        Menu();
        Console.ReadKey();}
    private static void Specifications(){ // Specifications
        Console.ForegroundColor = ConsoleColor.Green; DateTime _d_t = new DateTime();
        Console.WriteLine("\t\t\t     " + _d_t.Date.ToUniversalTime());
        int _n = 0; int[,] _i = new int[_n, _n];
        Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine(new string('_', 80));
        Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("\t\t\t  CONSOLE APPLICATION MENU"); Console.WriteLine();
        Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine(new string('_', 80));}
    private static void MenuPrint(int i_choice){ // MenuPrint
        Console.Clear();
        Specifications();
        for (int i = 0; i < _menuitems.Length; i++) {
            if (i == i_choice){
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write(_cursor);
                Console.ForegroundColor = ConsoleColor.DarkGreen;}
            if (i == i_choice){
                Console.ForegroundColor = ConsoleColor.Green;}
            else Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.WriteLine(_menuitems[i]);}}
    private static int Menu(){
        int choice = 0;
        while (true){
            MenuPrint(choice);
            switch (Console.ReadKey().Key){
                case ConsoleKey.UpArrow:
                    if (choice != 0)
                        --choice;
                    break;
                case ConsoleKey.DownArrow:
                    if(choice != _menuitems.Length - 1)
                        ++choice;
                    break;
                case ConsoleKey.Enter:
                    Console.CursorVisible = true;
                    return choice;}}}}
#endregion
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2011, 20:29
Помогаю со студенческими работами здесь

Запуск консольного приложения из другого приложения
Я понимаю, что мой вопрос уже разжеван. Однако точного ответа я пока на него не нашел. У меня есть некоторое приложение. Я хочу по...

Проект консольного приложения из Windows приложения
привет всем. В чем может быть ошибка? 1&gt;MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в...

Подключение к БД из консольного приложения
Есть консольное приложение. Нужно чтобы оно подключалось в БД Microsoft Access. Как это реализовать?

разработка консольного приложения
Нужно Разработать консольное приложение, осуществляющее расчёт значения функции в заданной точке. Аргумент функции задаётся с консоли,...

Рестарт консольного приложения
Как можно реализовать рестарт консольного приложения (использую VS 2012)? Находил на форуме решения только для Borland.


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru