Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165

Создание консольной версии приложения (своя консоль) - как обрабатывать в ней команды

12.08.2014, 12:50. Показов 4895. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Буквально вчера закончил очередной проект, а до дедлайна еще 5 дней. И я решил чтобы зря время не терять (делать мне больше нечего) создать копию этого проекта только в виде консоли. Особой пользы это не принесет, но как говорил - делать нечего и просто интересно попробовать и заказчик не против. Однако пилить еще один проект переносить и адаптировать классы с оригинального проекта (WinForms) к консоли - слишком долго да и муторно и я решил писать собственную консоль в законченном проекте. Была создана дополнительная форма, добавлены два компонента (RichTextBox - окно вывода), (TextBox - окно ввода команд). С этим я справился. Теперь нужно было придумать как выполнять команды в консоли и как их вообще хранить. Это дело я доверил словарю (string,string) где ключ это имя команды, а значение ключа это сама команда (придумал за 10 минут). После получения команды из поля ввода программа делает перебор всех ключей из словаря и если находит такой же ключ как и команда - выполняет команду из значения ключа.
Вот вопрос: как Вам такая реализация собственной консоли в Windows Forms приложении? Или есть более лучшие способы это сделать? (написанные библиотеки и т.д).

Заранее спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2014, 12:50
Ответы с готовыми решениями:

Как вывести результат консольной команды
Здравствуйте. Localhost.Ubuntu12.04.Нужно резать видео на превью. Поставил ffmpeg.Выполняю avconv -i /02.flv -an -ss 30 -vframes 1 -y -f...

как записать результат выполнения консольной команды в массив
Здравствуйте , есть консольная команда , которую я планирую прикрутить к крону. Мне необходимо отпарсить результат её выполнения , что-то...

Как скрыть консоль во время выполнения консольной программы?
Использую вывод в файл и нужно, чтобы консоль не высвечивалась при выполнении программы

7
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
12.08.2014, 13:11
Лучший ответ Сообщение было отмечено Frederick как решение

Решение

Если верить Страуструпу, то начинайте с простой реализации и постепенно усовершенствуйте её.

Библиотек подобных не встречал.
1
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
12.08.2014, 17:26  [ТС]
Цитата Сообщение от avg93 Посмотреть сообщение
начинайте с простой реализации и постепенно усовершенствуйте её.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Commands
{
   internal static class ConsoleManager
   {
       private static Dictionary<string, string> commandsDictionary = new Dictionary<string, string>()
       {
           {"Exit","Exit"},
           {"Restart","Restart"}
       }; // коллекция команд
       
       internal static void RunCommand(string command)
       {
           string inputCommand = command;
           foreach (var commandKey in commandsDictionary.Keys ) // перебор всех ключей и если команда совпадает с хоть одним ключом - её выполнение
           {
               if (commandKey.Contains(inputCommand) == false) continue;
 
                   switch (commandsDictionary[inputCommand])
                   {
                       case "Exit":
                           Environment.Exit(0);
                           return;
                       case "Restart":
                           Application.Restart();
                           return;
                   }
           }
       }
   }
}
Вот написал простенький пример. Можете навести на недочеты?
0
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
12.08.2014, 17:31
Цитата Сообщение от Frederick Посмотреть сообщение
string inputCommand = command;
Вот это для чего сделано?
Цитата Сообщение от Frederick Посмотреть сообщение
if (commandKey.Contains(inputCommand) == false) continue;
Я бы лучше сделал сообщение об ошибке, дабы пользователь знал что ошибся при вводе, а не думал что программа не работает как надо.
0
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
12.08.2014, 17:40  [ТС]
Цитата Сообщение от avg93 Посмотреть сообщение
Вот это для чего сделано?
Я просто уже привык к объявлению переменных и передаче ей значения параметра.

Цитата Сообщение от avg93 Посмотреть сообщение
Я бы лучше сделал сообщение об ошибке, дабы пользователь знал что ошибся при вводе, а не думал что программа не работает как надо.
Спасибо, лучше выкидывать исключения с ошибкой или просто бокс с сообщением?
0
61 / 61 / 12
Регистрация: 11.12.2009
Сообщений: 248
12.08.2014, 17:45
Цитата Сообщение от Frederick Посмотреть сообщение
Спасибо, лучше выкидывать исключения с ошибкой или просто бокс с сообщением?
Исключение я думаю тут будет лишнее. Так что второй вариант.
1
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
12.08.2014, 19:05
Frederick,
Ваш код легко переписывается без цикла
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
        private static readonly Dictionary<string, string> CommandsDictionary = new Dictionary<string, string>
        {
            {"Exit", "Exit"},
            {"Restart", "Restart"}
        }; // коллекция команд
 
        private static void RunCommand(string command)
        {
            if (!CommandsDictionary.ContainsKey(command))
            {
                // Команда не найдена
                return;
            }
            switch (CommandsDictionary[command])
            {
                case "Exit":
                    // Exit
                    Environment.Exit(0);
                    return;
                case "Restart":
                    // Restart
                    return;
            }
        }
0
27 / 27 / 7
Регистрация: 15.06.2014
Сообщений: 165
12.08.2014, 19:38  [ТС]
Цитата Сообщение от XRoy Посмотреть сообщение
Ваш код легко переписывается без цикла
Да, спасибо, так быстрее работает. Если дела пойдут, то попробую написать библиотеку для своих команд и выложу сюда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2014, 19:38
Помогаю со студенческими работами здесь

Создание Trial-версии приложения
Здравствуйте, я тут делаю одну программу, точнее собираюсь, вот хочу спросить у вас, как сделать так что бы программа была при установке...

Получение консольной команды
Подскажите как можно получить консольную команду заданную к приложению: test.jad +ip +port то есть как получить значение ip и port...

Выполнение консольной команды
Мне нужно выполнить команду и вставить туда значение переменных точнее выполнить консольую команду со значением переменных ...

Запуск консольной команды windows
Добрый день всем! Вопрос: как запустить какую-либо команду для cmd с помощью шарпа? Например ping ya.ru или ipconfig и куда-нибудь...

Как обрабатывать ошибки, когда трассировка стека не имеет пакета приложения?
Например вот: java.lang.NullPointerException at...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru