Как из консольного приложения сделать оконное c
- Окно Toolbox (Панель элементов управления) - элементы управления вы можете разместить на создаваемой форме.
- Окно Solution Explorer (Обозреватель решений) - здесь вы сможете увидеть следующие узлы: Properties - настройки проекта, Links (Ссылки) - подключенные к проекту библиотеки, а также созданные и подключенные к проекту файлы исходных кодов (с расширением .cs) и подключенные к проекту формы (например, Form1).
- Окно Class View (Окно классов) - здесь представлены все созданные в программе классы.
- Окно Properties (Свойства) - выбрав любой элемент управления или даже форму, вы сможете увидеть все параметры данного объекта, а также изменить значения, установленные в них по умолчанию.
Создание оконных приложений сводится к созданию всех необходимых диалоговых окон, а также к размещению на них необходимых элементов. В дальнейшем мы настраиваем обработку событий, создаваемых пользователем, и настраиваем технические аспекты работы программы. В нашем случае сначала разместим все необходимые элементы управления на главной форме, после чего добавим обработчик события перемещения мыши и обработку нажатия кнопок.
Добавление новых элементов управления на форму
Итак, после того как вы ввели имя проекта, установили необходимый шаблон и нажали кнопку ОК, MS Visual Studio автоматически создаст каркас оконного приложения, после чего мы сможем добавить на него новые оконные элементы.
Для этого необходимо перетащить необходимый оконный элемент из окна инструментов (ToolBox).
Нашему окну потребуется 2 элемента поля для ввода, в которые мы будем выводить координаты указателя мыши, что облегчит нам понимание работы программы.
В центре окна будет находиться надпись, которую мы создадим с помощью элемента Label.
Снизу будут расположены 2 кнопки.
Перейдите в свойства строки Label1, где измените текст на «Вы стремитесь сделать мир лучше?». Также измените тип шрифта, для этого найдите свойство Font (рис. 5).
Рисунок 5. Свойство Font элемента Label.
После чего установите тип шрифта Tahoma, ширину шрифта Bold и размер равный 16 (рис. 6).
Рисунок 6. Установки шрифта.
Далее измените текст на кнопках, используя свойство Text.
Техническая часть работы программы
- Сначала мы добавим обработчик события перемещения мыши и реализуем вывод ее координат x и y в два созданных поля ввода.
- Далее мы создадим функции обработчики щелчка по каждой из клавиш мыши (особенно усердные пользователи все же смогут попасть по кнопке «Да, конечно!»).
- Далее мы добавим код, реализующий случайное перемещение окна в том случае, если курсор приблизиться к кнопке «Да, конечно!».
Определение перемещения указателя мыши по форме
Щелкните непосредственно на части формы создаваемого приложения (НЕ на одном из элементов).
Теперь перейдите к свойствам формы с помощью щелчка правой кнопки мыши -> контекстное меню свойства.
Данная функция, обрабатывающая событие перемещения указателя мыши над формой, получает 2 параметра: объект отправитель и экземпляр класса MouseEventsArgs, содержащий информацию о координатах указателя мыши и других текущих свойствах.
textBox1 и textBox2 это экземпляры класса textbox, реализующие управление нашими элементами поля для ввода.
Член данных экземпляров Text позволяет установить текст в данных полях.
Таким образом, если теперь откомпилировать программу (F5), при перемещении указателя мыши по форме окна мы будем видеть координаты указателя (внутри формы), которые будут непрерывно изменяться.
Добавьте следующие строки кода:
Теперь снова вернитесь к конструктору и добавьте вторую кнопку, также с помощью двойного щелчка по ней.
Она будет содержать следующий код:
Теперь нам осталось только реализовать перемещение окна в тот момент, когда мышь приближается к кнопке «Да, конечно».
Для этого мы добавим код в функцию:
private void Form1_MouseMove(object sender, MouseEventArgs)
Принцип очень прост: получая координаты движения мыши, мы проверяем не входят ли они в квадрат, очерчивающий нашу кнопку с небольшим запасом. Если да, то мы генерируем 2 случайных числа, которые будут использованы для перемещения окна.
Также нам понадобится объявить несколько "рабочих" переменных, которые мы будем в дальнейшем использовать.
Генерация случайных чисел
Random rnd = new Random();
Здесь мы объявили экземпляр класса Random (rnd), с помощью которого мы будем генерировать случайные числа. В дальнейшем мы будем использовать код, вида rnd.Next (диапазон_генерации) или rnd.Next (от, до -1) для генерации случайного числа.
Также мы объявим еще несколько переменных, часть из которых сразу будет инициализирована.
tmp_location объявляется для того, чтобы в будущем временно хранить текущее положение окна.
Также нам следует подумать о том, что при случайном перемещении, наше окно может выйти далеко за пределы экрана.
_h и _w будут хранить в себе размеры экрана пользователя, которые определяются при их инициализации.
Теперь код этой функции будет выглядеть следующим образом:
Вот, собственно, и все. Откомпеллировав приложение, можете попробовать нажать на кнопку "Да, конечно". Это будет крайне трудно.
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.
Закрыт 5 лет назад .
Хотелось бы перейти из консольных приложений на оконные, но сколько ни смотрю на эти api функции, у меня одни квадратные глаза. Я вообще не могу втянуть, что делать с этой функцией, куда ее вписать, хотя когда писал для консоли, с функциями проблем не было. Может поможете, кто чем может: сайтом, справочником, или так можно объяснить. В общем спасибо сразу. )
Попробуйте Qt, это не winapi, возможно вам подойдет
1,065 1 1 золотой знак 10 10 серебряных знаков 21 21 бронзовый знакЕсли на C++ если кроссплатформенные фреймворки: посмотрите на Qt, wxWidget (я как раз сейчас немного изучаю этот фреймворк), GTK+.
361 1 1 золотой знак 5 5 серебряных знаков 13 13 бронзовых знаков 2,009 5 5 золотых знаков 25 25 серебряных знаков 41 41 бронзовый знак Может хватит уже советовать WinForms?:) Есть же WPF, который пропагандирует намного более "правильный" подход к построению гуя. WinForms же фактически является оберткой над WinAPI WinForms просто значительно проще WPF. Для обучения пойдет. Хотя лучше сразу учиться правильным вещам. WinForms значительно хуже WPF в том, что (1) на нём тяжело писать приложения с нормальной архитектурой, (2) в нём много специфических для WinAPI-программирования деталей, учить которые нормальному программисту нафиг не упало, особенно в свете уже пришедшего к нам WinRT. Лучше начинать сразу с концептуально чистого WPF. Или сразу смотреть в сторону WinRT, несмотря на всё то, чем его поливают, API довольно чист и красив, нет тяжелого наследия и костылей обратной совместимости, как в WPF или WinAPIНедавно наткнулся на эту страничку, все описано довольно доступным языком: Основы программирования для Win32 API
37.8k 10 10 золотых знаков 43 43 серебряных знака 79 79 бронзовых знаковПопробуйте библиотеки: Qt или GTK+
WinAPI это конечно мощный и быстрый инструмент, но не кроссплатформенный, да и скорость разработки на нем оставляет желать лучшего.
Если речь о WinAPI, то по своему опыту, могу сказать - функции и правда по началу кажутся очень страшнми, но все начинается, как ни странно с классов и велосипедов, о которых ни кто не говорит, ибо стесняются, но все поголовно пишут. ))
И по-моему, тут нет ничего удивительного - в WinAPI есть сразу много чего, а для решения основных задач достаточно только некоторой доли от этого всего, поэтому можно увидеть как в нескольких различных классах-обертках используются одни и те же API-функции.
Некоторые пишут подсматривая в готовые фреймворки, типа MFC, WTL, я подсматривал тогда в Delphi.
Для облегчения жизни, советую брать курс на интегрированную работу с каким-нибудь готовым набором примитивов, типа STL и в обязательном порядке научиться работать в MSDN
Изучив это руководство, вы:
- Добавите второй проект.
- Ссылка на библиотеки и добавление пакетов
- Выполните дополнительную отладку.
- Проверите готовый код.
Предварительные условия
Для работы с этой статьей можно использовать любое из следующих приложений калькулятора.
Добавление еще одного проекта
Реальный код связан с проектами, которые объединены в решение. Вы можете добавить проект библиотеки классов в приложение калькулятора, предоставляющее некоторые функции калькулятора.
В Visual Studio выберите Файл > Добавить > Новый проект, чтобы добавить новый проект. В Обозревателе решений щелкните решение правой кнопкой мыши, чтобы добавить проект из контекстного меню.
В Обозревателе решений щелкните узел решения правой кнопкой мыши и выберите пункты Добавить > Новый проект.
В диалоговом окне Настройка нового проекта введите имя проекта CalculatorLibrary и нажмите кнопку Далее.
Переименуйте файл Class1.cs в CalculatorLibrary.cs. Чтобы переименовать файл, щелкните правой кнопкой мыши имя в Обозревателе решений и выберите команду Переименовать, затем выберите имя и нажмите клавишу F2 либо выберите имя и щелкните еще раз, чтобы ввести его.
Теперь необходимо добавить ссылку на проект, чтобы первый проект мог использовать API, предоставляемые новой библиотекой классов. Правой кнопкой мыши щелкните узел Зависимости в проекте Калькулятор и выберите Добавить ссылку на проект.
Откроется диалоговое окно Диспетчер ссылок. Это диалоговое окно позволяет добавлять ссылки на другие проекты, а также сборки и библиотеки DLL COM, необходимые вашим проектам.
В диалоговом окне Диспетчер ссылок установите флажок для проекта CalculatorLibrary и выберите OK.
Ссылка на проект отображается в узле Проекты в обозревателе решений.
В файле Program.cs выберите класс Calculator и весь его код и нажмите CTRL+X, чтобы вырезать его. Затем в CalculatorLibrary.cs вставьте код в пространство имен CalculatorLibrary .
Добавьте public до класса калькулятора, чтобы предоставить его за пределами библиотеки.
Теперь код в CalculatorLibrary.cs должен выглядеть следующим образом.
Или попробуйте добавить директиву using в начало файла.
Добавление директивы using позволяет удалить пространство имен CalculatorLibrary из места вызова, но это приводит к неоднозначности. Является ли Calculator классом в CalculatorLibrary или Calculator — это пространство имен?
Чтобы устранить неоднозначность, измените имя пространства имен Calculator на CalculatorProgram в файле Program.cs.
В Обозревателе решений щелкните узел решения правой кнопкой мыши и выберите пункты Добавить > Новый проект.
В диалоговом окне Настройка нового проекта введите имя проекта CalculatorLibrary и нажмите кнопку Далее.
Visual Studio создаст новый проект и добавит его в решение.
Переименуйте файл Class1.cs в CalculatorLibrary.cs. Чтобы переименовать файл, щелкните правой кнопкой мыши имя в Обозревателе решений и выберите команду Переименовать, затем выберите имя и нажмите клавишу F2 либо выберите имя и щелкните еще раз, чтобы ввести его.
Теперь необходимо добавить ссылку на проект, чтобы первый проект мог использовать API, предоставляемые новой библиотекой классов. Правой кнопкой мыши щелкните узел Зависимости в проекте Калькулятор и выберите Добавить ссылку на проект.
Откроется диалоговое окно Диспетчер ссылок. Это диалоговое окно позволяет добавлять ссылки на другие проекты, а также сборки и библиотеки DLL COM, необходимые вашим проектам.
В диалоговом окне Диспетчер ссылок установите флажок для проекта CalculatorLibrary и выберите OK.
Ссылка на проект отображается в узле Проекты в обозревателе решений.
В файле Program.cs выберите класс Calculator и весь его код и нажмите CTRL+X, чтобы вырезать его. Затем в CalculatorLibrary.cs вставьте код в пространство имен CalculatorLibrary .
Добавьте public до класса калькулятора, чтобы предоставить его за пределами библиотеки.
Теперь код в CalculatorLibrary.cs должен выглядеть следующим образом.
Или попробуйте добавить директиву using в начало файла.
Добавление директивы using позволяет удалить пространство имен CalculatorLibrary из места вызова, но это приводит к неоднозначности. Является ли Calculator классом в CalculatorLibrary или Calculator — это пространство имен?
Чтобы устранить неоднозначность, переименуйте пространство имен из Calculator в CalculatorProgram в Program.cs и в CalculatorLibrary.cs.
Начните с добавления директив using в начало файла CalculatorLibrary.cs.
Это использование класса Trace должно подразумевать ссылку на класс, который он связывает с файловым потоком. Это требование означает, что калькулятор будет работать лучше в качестве объекта, поэтому добавьте конструктор в начало класса Calculator в CalculatorLibrary.cs.
Также удалите ключевое слово static , чтобы изменить статический метод DoOperation на метод-член.
Добавьте выходные данные журнала для каждого вычисления. DoOperation будет иметь следующий вид.
Также измените место вызова DoOperation , чтобы оно ссылалось на объект с именем calculator в нижнем регистре. Теперь код является вызовом члена, а не вызовом статического метода.
Снова запустите приложение. Когда все будет готово, щелкните правой кнопкой мыши узел проекта Калькулятор и выберите Открыть папку в проводнике.
В проводнике перейдите в папку выходных данных в разделе bin/Debug/ и откройте файл calculator.log. Результат должен выглядеть следующим образом.
Сейчас файл CalculatorLibrary.cs должен выглядеть следующим образом.
Файл Program.cs должен выглядеть как следующий фрагмент кода.
Добавление пакета NuGet: запись в JSON-файл
В Обозревателе решений щелкните правой кнопкой мыши узел Зависимости для проекта CalculatorLibrary и выберите Управление пакетами NuGet.
Откроется диспетчер пакетов NuGet.
Найдите и выберите пакет Newtonsoft.Json и нажмите кнопку Установить.
Visual Studio скачивает пакет и добавляет его в проект. Новая запись отображается в узле "Ссылки" в Обозревателе решений.
Если появится запрос на принятие изменений, нажмите кнопку OK.
Visual Studio скачивает пакет и добавляет его в проект. Новая запись отображается в узле Пакеты в Обозревателе решений.
Добавьте директиву using для Newtonsoft.Json в начало файла CalculatorLibrary.cs.
Создайте объект члена JsonWriter и замените конструктор Calculator следующим кодом.
Измените метод DoOperation , чтобы добавить код JSON writer .
Добавьте метод для завершения синтаксиса JSON после ввода пользователем всех данных для операции.
В конце файла Program.cs перед return; добавьте вызов к Finish .
Выполните сборку приложения и запустите его. Попробуйте выполнить несколько операций и закройте приложение, используя команду n.
Откройте файл calculatorlog.json в проводнике. Выходные данные должны быть примерно следующими.
Отладка. Установка точки останова и попадание в нее
Отладчик Visual Studio — очень эффективное средство. Отладчик может пошагово пройти код, чтобы найти точку, в которой есть ошибка программирования. Затем можно понять, какие исправления необходимо внести, и внести временные изменения, чтобы можно было продолжить работу приложения.
В файле Program.cs щелкните поле слева от следующей строки кода. Можно также выбрать строку и нажать клавишу F9 или щелкнуть правой кнопкой мыши и выбрать Точка останова > Вставить точку останова.
Красная точка указывает на точку останова. Для приостановки приложения и проверки кода можно использовать точки останова. Вы можете установить точку останова в любой исполняемой строке кода.
Выполните сборку и запуск приложения. Введите следующие значения для вычисления.
- Для первого числа введите 8.
- Для второго числа введите 0.
- Давайте поэкспериментируем с оператором. Введите d.
Приложение приостанавливается в созданной точке останова, которая обозначается желтым указателем слева и выделенным кодом. Выделенный код еще не выполнен.
Теперь, когда приложение приостановлено, вы можете проверить его состояние.
Отладка. Просмотр переменных
В выделенном коде наведите указатель мыши на переменные, такие как cleanNum1 и op . Текущие значения этих переменных, 8 и d соответственно, отображаются в подсказках по данным.
При отладке очень важно выполнить проверку переменных на соответствующие значения для устранения проблем.
В нижней области просмотрите окно Локальные. Если оно закрыто, выберите Отладка > Окна > Локальные, чтобы открыть его.
В окне Локальные отображаются все переменные, находящиеся в области, а также их значения и типы.
Взгляните на окно Видимые.
Окно "Видимые" аналогично окну Локальные, но отображает переменную непосредственно перед текущей строкой кода и после строки, в которой приостановлено приложение.
Далее можно поочередно выполнить код в отладчике по одной инструкции за раз. Это называется пошаговым выполнением.
Отладка. Пошаговое прохождение кода
Нажмите клавишу F11 или выберите Отладка > Выполнять по шагам.
С помощью команды "Выполнять по шагам" приложение выполняет текущий оператор и переходит к следующему исполняемому оператору. Как правило, это следующая строка кода. Желтый указатель слева всегда указывает на текущий оператор.
Вы только что выполнили по шагам метод DoOperation в классе Calculator .
Чтобы получить иерархический обзор выполнения программы, просмотрите окно Стек вызовов. Если оно закрыто, выберите Отладка > Окна > Стек вызовов, чтобы открыть его.
В этом представлении показан текущий метод Calculator.DoOperation , обозначенный желтым указателем. Во второй строке показана функция, которая вызвала метод из метода Main в Program.cs.
В окне Стек вызовов показан порядок вызова методов и функций. Это окно предоставляет доступ ко многим функциям отладчика, таким как Перейти к исходному коду, из контекстного меню.
Нажмите клавишу F10 или выберите Отладка > Шаг с обходом несколько раз, пока приложение не остановится в операторе switch .
Команда "Шаг с обходом" аналогична команде "Выполнять по шагам", за исключением того, что если текущий оператор вызывает функцию, то отладчик выполняет код в вызываемой функции и не приостанавливает выполнение до возврата функции. Команда "Шаг с обходом" выполняется быстрее, чем "Выполнять по шагам", если вас не интересует определенная функция.
Нажмите клавишу F10 еще раз, чтобы приложение приостанавливалось на следующей строке кода.
Этот код проверяет деление на нуль. Если приложение продолжит работать, оно вызовет общее исключение (ошибку), но вы можете выполнить другое действие, например просмотреть фактическое возвращаемое значение в консоли. Один из вариантов — использовать функцию отладчика Изменить и продолжить, чтобы внести изменения в код и продолжить отладку. Тем не менее мы покажем другой метод для временного изменения потока выполнения.
Отладка. Тестирование временного изменения
Выберите желтый указатель, который в данный момент приостановлен на операторе if (num2 != 0) , и перетащите его в следующий оператор.
Если перевести указатель сюда, приложение полностью пропускает оператор if , чтобы вы могли увидеть, что происходит при делении на ноль.
Нажмите клавишу F10, чтобы выполнить строку кода.
Нажмите клавишу F5 или выберите Отладка > Продолжить отладку.
Символ бесконечности отображается в консоли как результат математической операции.
Закройте приложение должным образом с помощью команды n.
Полный код
Ниже приведен полный код для файла CalculatorLibrary.cs после выполнения всех шагов.
А вот код для файла Program.cs:
Следующие шаги
Поздравляем с завершением этого учебника! Для получения дополнительных сведений изучите следующие ресурсы.
В диалоговом окне Новый проект выберите Приложение Windows Forms».
Каждый раз, когда вы создаете приложение Windows, Visual Studio будет отображать пустую форму по умолчанию, на которую вы можете перетащить элементы управления на основную форму приложения и настроить их размер и положение.
Если вы хотите установить какие-либо свойства формы, вы можете использовать окно свойств Visual Studio, чтобы изменить их. Есливы не видите окно Свойств, в меню ВИД щелкните Окно свойств. В этом окне перечислены свойства выбранной в данный момент формы Windows или элемента управления, и здесь вы можете изменить существующие значения.
Далее на вкладке ВИД открываем панель элементов. Находим там виджет Button и перетаскиваем его на форму. Дважды щелкаем по новому элементу и открываем окно с кодом кнопки.
private void button1_Click(object sender, EventArgs e)
// вводим следующий код
MessageBox.Show("Привет Мир");
При нажатии на кнопку на экране должно появиться приветствие. Результат:
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 2 ):
Здравствуйте, Михаил! А почему в примере здесь используется 2012 visual studio, а не последняя его версия или 2019? Буду рад, если ответите.
Добрый день. В примере используется бесплатная, учебная версия программы. Так как это учебный проект, то не принципиально какая версия программы. Тем более что, в части создания проекта все версии схожи между собой.
Читайте также: