Как создать textbox в visual studio

Обновлено: 06.07.2024

В данной теме рассмотрен пример создания приложения расчета площади треугольника по формуле Герона. Приложение реализовано в системе Microsoft Visual Studio как Windows Forms Application .

В работе описывается программирование события клика на кнопке. Также рассматриваются особенности взаимодействия программного кода с компонентами Label (метка), Button (кнопка), Edit (строка ввода).

Содержание

  • Математическая постановка задачи
  • Выполнение
    • 1. Создать проект как Windows Forms Application .
    • 2. Размещение компонент на форме.
    • 3. Настройка свойств компонент.
    • 4. Программирование события клика на кнопке button1 .
    • 5. Запуск проекта на выполнение

    Поиск на других ресурсах:

    Математическая постановка задачи

    Заданы длины сторон треугольника a , b , c . Используя средства системы Microsoft Visual Studio разработать приложение, которое вычисляет площадь треугольника по формуле Герона. Приложение реализовать на языке C++ как Windows Forms Application .

    Формула Герона для расчета площади треугольника:

    05_02_00_004_formula_01

    где a , b , c – стороны треугольника; p – полупериметр, рассчитывается по формуле:

    Выполнение

    1. Запустить Microsoft Visual Studio . Создать проект.

    Запустить MS Visual Studio . Создать проект как Windows Forms Application на базе шаблона Visual C++ . Пример создания проекта типа Windows Forms Application в C++ и типы создаваемых файлов приведен здесь.

    В результате, будет создана главная форма приложения как изображено на рисунке 1.

    05_02_00_004_01_

    Рис. 1. Главная форма приложения

    05_02_00_004_02_

    Рис. 2. Команда Code с меню View

    05_02_00_004_03_

    Рис 3. Вызов режима просмотра кода из контекстного меню

    05_02_00_004_04_

    Рис 4. Вызов режима просмотра кода из Solution Explorer

    Таким образом можно переходить между режимами проектирования ( Design ) и редактирования исходного кода ( Code ) проекта.

    Класс формы содержит:
    – конструктор Form1() ;
    – деструктор

    Form1() ;
    – метод InitializeComponent() , в котором можно реализовать начальную инициализацию внутренних переменных.

    2. Размещение компонент на форме.

    Для работы программы нужно разместить соответствующие компоненты на форме. Чтобы размещать компоненты, нужно перейти в режим проектирования ( Design ) одним из вышеописанных способов.

    Компоненты находятся на панели инструментов Toolbox (рисунок 6).

    05_02_00_004_06_

    Рис. 6. Палитра инструментов Toolbox

    После размещения компонент форма будет иметь вид как показано на рисунке 10.

    05_02_00_004_07_

    Рисунок 7. Компонент Label

    05_02_00_004_08_

    Рисунок 8. Компонент TexbBox

    05_02_00_004_09_

    Рисунок 9. Компонент Button

    05_02_00_004_10_

    Рисунок 10. Компонент Label

    3. Настройка свойств компонент.

    или клавишей F4.

    05_02_00_004_12r

    Рис. 12. Настройка заголовка главной формы программы

    После выполненных действий, форма будет иметь вид, как изображено на рисунке 13.

    05_02_00_004_13r

    Рис. 13. Вид формы после настройки компонент

    4. Программирование события клика на кнопке button1.

    05_02_00_004_14r

    Рис. 14. Вызов обработчика события Click клика на кнопке button1

    В результате выполненных действий, система Microsoft Visual Studio сформирует обработчик события и переключит окно в режим ввода программного кода.

    Обработчик события (метод) имеет название button1_Click . Формируется следующий программный код:

    Между фигурными скобками нужно вписать собственный код вычисления площади треугольника по формуле Герона.

    Листинг программного кода обработчика события button1_Click() следующий:

    Объясним некоторые фрагменты кода.

    Чтобы перевести значение компонента textBox1->Text из строки в соответствующей вещественный тип float используется метод Parse() из класса System::Double .

    Чтобы занести в переменную a типа float значение строки с textBox1->Text можно использовать один из двух способов:

    Указатель this есть указателем на данный класс (класс Form1 ).

    Для вычисления квадратного корня используется функция Sqrt() из класса Math :

    Для преобразования из типа float в строчный ( string ) используется метод ToString() :

    5. Запуск проекта на выполнение.

    Теперь можно запускать проект на выполнение (клавиша F5 ) и тестировать его работу.

    Сегодня мы будем создавать интересный контрол, представляющий собой TextBox и встроенной кнопкой:


    Такие контролы используются, в основном, в программах, работающих с базами данных. Однако, путем универсализации его функционала, его ареал использования можно существенно расширить.

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

    Создаем новый User Control. Я, для простоты, буду называть все классы, свойства и т.д. теми же именами, которые использовал в библиотеке. Вы можете использовать любые собственные имена.

    Для начала, в режиме дизайнера форм рисуем контрол. Я в работе использую не Visual Studio, а SharpDevelop, поэтому внешний вид каких-то элементов среды может отличаться от таковых в VS, но, я думаю, в целом все достаточно похоже.

    Нам необходимо стандартный холст UserControl растянуть так, как будет в итоге выглядеть наш контрол:



    Далее, нам нужно разместить на холсте стандартный TextBox со свойством Dock равным Fill. TextBox займет собой весь холст по ширине, а по высоте - насколько позволит высота строки. Настраиваем TextBox по своему вкусу, устанавливаем тип рамки, шрифт, кегль, цвет текста и т.д.
    Затем размещаем на холсте поверх TextBox кнопку или, как в моем случае, Label с установленным значением рамки, заливкой фона, текстом ". " и свойством Cursor со значением Hand. Получится та же кнопка. Мне вариант с Label нравится больше, субъективно лучше выглядит. В итоге получаем следующее:



    Обзываем TextBox - CompoentTB, а Label - ComponentLB.


    У Label-кнопки необходимо установить свойство Anchor в значения Top и Right, чтобы кнопка была жестко привязана к верхнему правому углу и не двигалась при изменении размера контрола.



    Так же необходимо установить у кнопки значения MaximumSize и MinimumSize в значения, равные Size, чтобы она ни при каких обстоятельствах не меняла размер.

    По сути, визуальная составляющая контрола готова. Переходим в код.

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


    Т.е., при нажатии кнопки мыши цвет Label устанавливается в LightSalmon, а при отпускании - в Snow. Теперь Label стал совсем как настоящая кнопка.

    Теперь я хочу вынести из контрола кое-какие параметры встроенного TextBox. В частности, я хочу, чтобы можно было при создании контрола установить значения свойств Multiline и ReadOnly TextBox'a. Создаем свойства класса контрола:

    Небольшое отступление по использованию атрибутов в данном коде. Поскольку мы создаем визуальный компонент, нам необходимо сделать так, чтобы некоторые особо важные свойства контрола мы могли редактировать не в коде, а в режиме дизайнера форм. Для этого перед необходимыми свойствами мы указываем атрибуты Description (устанавливает описание свойства в PropertyGrid дизайнера форм) и Category (в котором указываем, к какой категории необходимо отнести свойство). Если кастомных свойств у нас немного (в данном контроле их будет всего четыре), удобно создать свою категорию, которая, за счет первого символа подчеркивания, еще и выводится в PropertyGrid первой. Удобно!


    После создания необходимых свойств нам нужно каким-то образом применять устанавливаемые в них значения к встроенному TextBox. Создадим универсальный метод обновления TextBox:


    Каждый раз при вызове данного метода свойства Multiline и ReadOnly встроенного TextBox устанавливаются равными соответствующим им свойствам контрола. Кроме того, поскольку при установке ReadOnly в true TextBox автоматически меняет заливку на серую. В методе мы насильно перекрашиваем TextBox каждый раз обратно в белый. Можно сделать и по другому, но пока и так сойдет. Далее, мы вызываем метод каждый раз, когда необходимо обновить состояние TextBox:


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


    Соответственно, используя каждый из элементов перечисления, мы направляем контрол по одному из путей реализации функционала. Создадим свойство с типом данных ActionType:


    Реализуем выполнение контрола с Action = ActionType.SelectObject. По логике действий, контрол должен открыть какую-то форму, подцепиться к событию FormClosing, получить какой-то объект и вывести строковое представление полученного объекта в текстовое поле контрола. Создадим два новых свойства, на этот раз - неинтерактивных:



    и внесем небольшое изменение в метод ReloadComponent():


    Логика такова - при перезагрузке контрола в ComponentTB.Text записываем строковое представление SelectedObject, либо, если SelectedObject не установлен - то записываем пустую строку.
    Все готово для обработки главного события контрола - выбора через нажатие на кнопку. Сначала создадим метод-обработчик:


    Логика такова: если свойство SelectForm установлено, то открывается форма. Какая форма будет открыта, контрол не знает. К событию FormClosing подключаем лямбда-выражение, которое перед закрытием дочерней формы проверяет у нее свойство Tag и, если оно установлено, то устанавливает его значение в значение свойства SelectedObject контрола. Таким образом, дочерняя форма должна возвращать в свойстве Tag какой-то объект. Как это сделать, мы увидим в самом конце.
    Осталось только подключить метод Select в качестве обработчика события Click кнопки:


    На данном этапе контрол уже умеет открывать дочернюю форму и получать от нее какой-то объект. Однако этого мало, необходимо расширить функционал для поддержки всех типов действий. Создадим интерактивное свойство Filter для действий OpenFile и SaveFile:


    Расширим метод Select() для поддержки всех необходимых действий:


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


    Метод-инициатор события BeforeSelect возвращает булево значение, указывающее основному обработчику, выполняться ему или нет. Внесем изменения в основной обработчик:


    Таким образом, если OnBeforeSelect() вернет true, основной обработчик выполняться не будет.
    Все, контрол успешно закончен. Можно проверять на форме. Создадим форму и четыре наших новых контрола: ksSelectObject, ksOpenFile, ksSaveFile и ksSelectDirectory:



    В соответствии с названиями устанавливаем каждому из контролов значения Action.

    Инструментарий:

    объект свойство name свойство text
    форма Вычисление суммы
    кнопка (button) btnExit Выход
    текстовое поле (textbox) txtA 0
    текстовое поле (textbox) txtB 0
    текстовое поле (textbox) txtC 0
    текстовое поле (textbox) txtSumma 0
    кнопка (button) btnCount Вычислить

    Visual c++ текстовые поля

    Выполнение:

    this-> Close();

    1. Создайте три элемента управления Textbox (txtA,txtB,txtC) для слагаемых. Задайте свойство Text для этих элементов управления, равное 0.
    2. Создайте еще один элемент управления TextBox (txtSumma) (размеры и расположение кнопок см. рис «форма Вычисление_суммы»).
    3. Создайте кнопку Вычислить (btnCount).
    4. Запрограммируйте событие Click для кнопки Вычислить следующим образом:
    где System – пространство имен; при написании кода его можно опустить
    Parse – функция преобразования строкового значение в целое число;
    1. Запустите приложение, введите значения для слагаемых и посмотрите, что произойдет, если Вы нажмете на кнопку Вычислить.
    2. Сохраните проект.
    Дополнительное задание. Измените приложение так, чтобы оно вычисляло сумму квадратов трех чисел. Контрольное задание. Разработайте приложение, которое вычисляет:
    • площадь треугольника по трем сторонам;
    • площадь прямоугольника по двум сторонам;
    • площадь треугольника по двум сторонам и углу между ними;
    • процент от числа.

    1. Какова основная функция элемента управления TextBox?
    2. Какая функция C++ округляет числовые значения?


    • Работа с файлами (создание, открытие, сохранение, параметры страницы печати, печать)
    • Правка текста (вырезать, вставить, копировать, отменить действие, удалить текст, выделить весь текст)
    • Поиск и замена текста
    • Переход к указанной строке
    • Вставка текущих даты и времени
    • Форматирование текста (выбор шрифта, размера текста, его стиля)
    • Настройки приложения (сохранение измененных параметров)
    Сперва создадим внешнюю оболочку программы. Добавим в проект следующие формы:
    • MainForm - Основная форма нашего блокнота (Создана изначально как Form1, для удобства переименуем её в MainForm)
    • GoToForm - Форма для перехода к указанной пользователем строке
    • SearchForm - Форма для поиска и замены текста
    • AboutForm - Форма с информацией о программе
    В процессе работы с программой мы будем изменять названия добавляемых элементов со стандартных (toopStripMenuItem1. toopStripMenuItem10) на более удобные нам. Такие имена я буду помещать в скобки напротив названия элементов.

    Работаем с MainForm

    Добавим на форму элемент menuStrip1 (menuStrip).


    Теперь создадим подменю для этих элементов и в их свойствах сразу укажем горячие клавиши (поле "ShortcutKeys"). Добавляем элементы в меню "Файл":
    • "Создать" (mFileNew): Ctrl + N
    • "Открыть. " (mFileOpen): Ctrl + O
    • "Сохранить" (mFileSave): Ctrl + S
    • "Сохранить как. " (mFileSaveAs): Ctrl + Alt + S
    • "Параметры страницы" (mFilePageParam)
    • "Печать. " (mFilePrint): Ctrl + P
    • "Выход" (mFileExit): Alt + F4
    • "Отменить" (mEditCancel): Ctrl + Z
    • "Вырезать" (mEditCut): Ctrl + X
    • "Копировать" (mEditCopy): Ctrl + C
    • "Вставить" (mEditPaste): Ctrl + V
    • "Удалить" (mEditDel): Del
    • "Найти и заменить" (mEditFind): Ctrl + F
    • "Перейти" (mEditGo): Ctrl + G
    • "Выделить всё" (mEditGiveAll): Ctrl + A
    • "Время и дата" (mEditTime): F5
    • "Перенос по словам" (mFormatTransfer). В свойствах этого элемента изменим значение поля "CheckOnClick" на True.
    • "Шрифт" (mFormatFont)
    • "Строка состояния" (mViewStatusStrip). В свойствах этого элемента изменим параметр "CheckState" на Checked и "CheckOnClick" на True.


    Формирование меню завершено. Теперь добавим на форму элемент StatusStrip1 (StatusStrip). Это будет строка состояния нашего блокнота.

    statusStrip

    В неё мы добавим 8 элементов StatusLabel:
    • "Количество строк:" (statusLab1)
    • "0" (statusLinesCount)
    • "Количество слов:" (statusLab2)
    • "0" (statusWordsCount)
    • "Символов с пробелами:" (statusLab3)
    • "0" (statusCharSpaceCount)
    • "Символов без пробелов:" (statusLab4)
    • "0" (statusCharCount)
    Теперь перейдем к главному. Добавим на форму элемент textBox1 (notebox). В его свойствах необходимо установить значение True для поля "Multiline". Для поля "Dock" установим значение Fill, чтобы наш textBox заполнил собой всё свободное пространство формы. Для поля "Scrollbars" выбираем значение Both.
    Если после установки значения Fill в поле "Dock" ваш textBox закрыл собой строку состояния или меню, то нужно просто клинкуть на него правой кнопкой мыши и нажимать пункт "На передний план" пока исчезнувшие элементы не станут видимыми.

    Заранее стоит установить модификатор доступа Public для поля "Modifers", чтобы позднее можно было взаимодействовать с нашим textBox через другие формы.


    Работаем с GoToForm

    Добавим в проект новую форму для перехода к указанной пользователем строке. Выбираем Проект - Добавить форму Windows. - Форма Windows Forms. Указываем имя формы "GoToForm.cs".


    В свойствах формы указываем следующие значения для полей:
    • FormBorderStyle - "FixedSingle" - Запрет изменения размеров окна формы
    • MinimizeBox - "False" - Запрет сворачивания окна формы
    • MaximizeBox - "False" - Запрет разворачивания окна формы
    • ShowIcon - "False" - Запрет отображения собственной иконки окна формы
    • ShowInTaskbar - "False" - Запрет отображения окна формы на панели задач
    • Text - "Перейти" - Название формы
    • TopMost - "True" - Окно формы будет расположено поверх остальных окон
    Для элемента textBox (tbGo) указываем в поле "Modifers" значение Public.

    Работаем с SearchForm

    Добавим в проект новую форму для перехода к указанной пользователем строке. Выбираем Проект - Добавить форму Windows. - Форма Windows Forms. Указываем имя формы "SearchForm.cs". Также в свойствах формы укажем значения аналогичные форме GoToForm.

    Работаем с AboutForm

    Добавим в проект новую форму для перехода к указанной пользователем строке. Выбираем Проект - Добавить форму Windows. - Окно "О программе". Указываем имя формы "AboutForm.cs". В вашем проекте появится такая форма:


    По-умолчанию значения полей в форме заполняются автоматически и берутся из сведений о проекте: "Проект" - "Свойства" - "Приложение" - "Сведения о сборке. ". Вы можете изменять эти сведения на своё усмотрение.

    Читайте также: