Как сделать конструктор visual studio

Обновлено: 05.07.2024

в интегрированной среде разработки (IDE) Visual Studio могут размещаться различные типы редакторов:

редактор Visual Studio core

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

Типы редакторов

дополнительные сведения о редакторе Visual Studio core см. в разделе расширение возможностей редактора и языковых служб.

Пользовательские редакторы

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

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

Пользовательский редактор может использовать встроенную активацию или упрощенное внедрение для реализации представления.

Внешние редакторы

внешние редакторы — это редакторы, которые не интегрированы в Visual Studio, такие как Microsoft Word, Блокнот или Microsoft FrontPage. Такой редактор можно вызывать, например, при передаче текста в него из VSPackage. Внешние редакторы регистрируют себя и могут использоваться вне Visual Studio. При вызове внешнего редактора его можно внедрить в главное окно, после чего оно появится в окне в интегрированной среде разработки. В противном случае интегрированная среда разработки создает для него отдельное окно.

IsDocumentInProjectМетод задает приоритет документа с помощью VSDOCUMENTPRIORITY перечисления. Если DP_External указано значение, файл может быть открыт внешним редактором.

Решения по проектированию редактора

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

Будет ли приложение сохранять данные в файлах или нет? Если данные будут сохранены в файлах, будет ли они работать в пользовательском или стандартном формате?

Если используется стандартный формат файла, другие типы проектов в дополнение к проекту смогут открывать и считывать и записывать данные. Однако при использовании пользовательского формата файла только тип проекта сможет открывать и считывать и записывать данные.

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

нужен ли редактор для размещения элементов управления ActiveX?

если в редакторе размещается ActiveX элементов управления, то реализуйте редактор активации на месте, как описано в этой активации. если на нем не размещены элементы управления ActiveX, используйте упрощенный редактор внедрения или настройте Visual Studio редактор по умолчанию.

Будет ли редактор поддерживать несколько представлений? Если вы хотите, чтобы представления редактора были видимыми одновременно с редактором по умолчанию, необходимо поддерживать несколько представлений.

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

Если редактор поддерживает несколько представлений, вы планируете использовать Visual Studio реализацию текстового буфера ( VsTextBuffer объекта) основного редактора для объекта данных документа? Это значит, что вы хотите поддерживать представление редактора параллельно с Visual Studio основным редактором? Эта возможность доступна в конструкторе форм.

Если необходимо разместить внешний редактор, можно ли внедрить редактор в Visual Studio ?

Если его можно внедрить, следует создать главное окно для внешнего редактора, а затем вызвать IsDocumentInProject метод и установить VSDOCUMENTPRIORITY для перечисления значение DP_External . Если редактор не может быть внедрен, интегрированная среда разработки автоматически создаст для нее отдельное окно.

В этом разделе

Предоставление поддержки отмены в конструкторах
Объясняет, как обеспечить поддержку отмены для конструкторов.

Выделение синтаксиса в пользовательских редакторах
Объясняет разницу между цветовым выделением синтаксиса в основном редакторе и в пользовательских редакторах.

Данные документа и представление документа в пользовательских редакторах
Объясняет, как реализовать данные документа и представления документов в пользовательских редакторах.

Связанные разделы

Устаревшие интерфейсы в редакторе
Объясняется, как получить доступ к основному редактору с помощью устаревшего API.

Расширение других частей Visual Studio
Объясняет, как создавать элементы пользовательского интерфейса, соответствующие остальным элементам Visual Studio .

Что? Этот компонент позволяет немедленно создать код для нового конструктора в классе.

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

Зачем? Вы можете объявить конструктор до его использования. Но этот компонент автоматически создаст его с соответствующими параметрами. Кроме того, изменение существующего конструктора требует обновления всех мест вызова, пока этот компонент не обновит их автоматически.

Как? Конструктор можно создать несколькими способами:

Поместите курсор в любую пустую строку в классе:

Курсор в пустой строке

Затем выполните одно из следующих действий:


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

    Снимок экрана: параметр "Создать конструктор".

    Выберите Создать конструктор в раскрывающемся меню.

    Откроется диалоговое окно Выбор элементов.

    Диалоговое окно выбора элементов

    Вы можете установить флажок Добавить проверки значений NULL, чтобы для параметров конструктора автоматически создавались проверки значений NULL.

    Конструктор создается с учетом указанных параметров.

    Снимок экрана: конструктор создается с учетом указанных параметров.

    Поместите курсор на экземпляр.

    Нажмите клавиши CTRL+ . чтобы открыть меню Быстрые действия и рефакторинг.

    Выберите Создать конструктор в <QualifiedName> (со свойствами) .

    Снимок экрана: параметр "Создать конструктор в Key (со свойствами)".

    Выделите элементы, которые вы хотите добавить в созданный конструктор:

    Выделение элементов

    Затем выполните одно из следующих действий:

    Клавиатура

    • Нажмите клавиши CTRL+ . чтобы открыть меню Быстрые действия и рефакторинг.

    Мышь


    • Щелкните правой кнопкой мыши и выберите меню Быстрые действия и рефакторинг.
    • Щелкните значок , который отображается в левом поле, если текстовый курсор уже находится в строке выбора элементов.

    Снимок экрана: параметр "Создать конструктор "Person string string"".

    Выберите Создать конструктор "TypeName(. )" в раскрывающемся меню.

    Конструктор создается с учетом выбранных параметров.

    Снимок экрана: конструктор создается с учетом выбранных параметров.

    Поместите курсор в строку с красной волнистой линией. Она указывает вызов несуществующего конструктора.

    Выделенный код VB

    Затем выполните одно из следующих действий:

    Клавиатура

    • Нажмите клавиши CTRL+ . чтобы открыть меню Быстрые действия и рефакторинг.

    Мышь

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

    Снимок экрана: параметр "Создать конструктор в "Person"".

    Выберите Создать конструктор в "TypeName" в раскрывающемся меню.

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

    Конструктор создается со всеми параметрами, выведенными из его использования.

    Результат создания метода VB

    Добавьте параметр в вызов существующего конструктора.

    Поместите курсор в строку с красной волнистой линией. Она указывает, что вы использовали конструктор, который еще не существует.

    Снимок экрана: строка с красной волнистой линией.

    Затем выполните одно из следующих действий.

    Клавиатура

    • Нажмите клавиши CTRL+ . чтобы открыть меню Быстрые действия и рефакторинг.

    Мышь

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

    Снимок экрана: параметр "Добавить параметр в "Person string string"".

    Выберите Добавить параметр в "TypeName(. )" в раскрывающемся меню.

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

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

    Вы также можете добавить параметр к существующему методу. Дополнительные сведения см. в статье Добавление параметра в метод.

    Найдите существующий конструктор и добавьте параметр:

    Снимок экрана: существующий конструктор.

    Поместите курсор внутри добавленного параметра.

    Затем выполните одно из следующих действий:


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

      Снимок экрана: параметр "Создать и инициализировать свойство Age".

      Выберите Создать и инициализировать свойство или Создать и инициализировать поле в раскрывающемся меню.

      Свойство или поле объявляется и автоматически называется в соответствии с вашими типами. Также добавляется строка кода для инициализации поля или свойства в теле конструктора.

      Выполнение

      1. Загрузить Microsoft Visual Studio .

      В результате будет создано окно с активной вкладкой Start Page (рисунок 1).

      Окно Microsoft Visual Studio 2010

      Рисунок 1. Окно Microsoft Visual Studio

      2. Создание приложения типа Windows Forms Application

      Чтобы создать новый проект (решение) на языке C++ , нужно выбрать последовательность команд (рис. 2):

      Система Microsoft Visual Studio предлагает разные виды шаблонов приложения для программирования на языке C++ (рис. 2).

      MS Visual Studio 2010. Вызов команды создания нового проекта

      Рисунок 2. Вызов команды создания нового проекта

      3. Основные элементы оконного интерфейса для работы с программой

      В результате окно Microsoft Visual Studio примет вид как показано на рисунке 4.

      В окне, в центре отображается основная форма приложения. На этой форме можно размещать компоненты. Компоненты размещаются на панели Toolbox (левая часть экрана).

      Свойства формы или компонента отображаются в утилите Solution Explorer (правая часть экрана). Изменяя эти свойства, можно влиять на вид формы, поведение формы, реализовывать обработчики событий формы и прочее.

      MS Visual Studio. Шаблон Windows Forms. Основные элементы окна приложения

      Рисунок 4. Основные элементы окна приложения

      4. Вызов режима ввода кода

      На данный момент активным есть режим проектирования формы. Чтобы перейти в режим набора текста программы, нужно вызвать команду Code с меню View (рисунок 5):

      Visual C++. Шаблон Windows Forms. Команда перехода в режим набора текста программы

      Рисунок 5. Команда перехода в режим набора текста программы

      Другой вариант вызова команды перехода в режим набора текста, это клик на соответствующей кнопке в Solution Explorer (рисунок 6).

      Visual C++. Шаблон Windows Forms. Кнопка перехода в режим набора текста программы

      Рисунок 6. Кнопка перехода в режим набора текста программы

      В результате отобразится текст программы.

      C++. MS Visual Studio. Режим просмотра текста программы

      Рисунок 7. Режим просмотра текста программы

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

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

      В вышеприведенном тексте создается пространство имен MyApp01 с помощью оператора

      В пространстве имен MyApp01 создается класс с именем Form1. Этот класс соответствует главной форме приложения Form1.

      Класс содержит конструктор, который вызывает метод

      В методе InitializeComponent() создается компонента-форма (переменная components ), которая есть контейнером. Это означает, что на форме могут размещаться другие компоненты (кнопки, метки, поля ввода и т.д.). Также в методе InitializeComponent() настраиваются параметры формы: название заголовка, размер (300 * 300 пикселей), шрифт по умолчанию.

      Form1() уничтожает форму (переменная components ) с помощью оператора delete .

      6. Файлы, которые создаются в проекте

      После создания проекта типа Windows Forms Application система Microsoft Visual Studio создает несколько файлов.

      Visual C++. Шаблон Windows Forms. Файлы C++, которые создаются в проекте типа

      Рисунок 8. Файлы C++ , которые создаются в проекте типа Windows Forms Application

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

      Для запуска проекта на выполнение используется команда Start Debuggin из меню Debug (клавиши F5).

      Скриншот панели выбора компонентов для создания графического приложения

      1. В первую очередь перечислим, какие компоненты должны быть установлены для создания графического приложения на языке С++. Их три, все относятся к разделу "Desktop development with C++":
      - VC++ 2017 v141 toolset (x86,x64)
      - Windows 10 SDK (10.0.15063.0) for Desktop C++ x86 and x64
      - C++/CLI support

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

      Окно выбора типа создаваемого приложения

      2. После установки среды разработки переходим
      File > New > Project. ( ^+N )
      В появившемся окне отыскиваем Installed > Visual C++ > CLR > CLR Empty Project

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

      3. Необходимо добавить в приложение главную форму. Есть два равносильных пути достижения этой цели.
      Первый: в "Solution Explorer" правой кнопкой мыши на названии проекта, во всплывшем контексном меню Add > New Item.
      Второй способ: в главном меню выбираем Project > Add New Item.
      Или просто нажимаем ^+A

      выбор Windows Form

      Во появившемся окне Visual C++ > UI > Windows Form

      Устранение ошибки 0x8000000A, иногда происходящей при создании формы

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

      Эта ошибка хорошо известна ещё по Visual Studio 2015. Можете почитать её обсуждение, к примеру, на сайте Microsoft по ссылке1, ссылке2, ссылке3. И более лучшего решения, чем закрывать вкладку, ещё нет. По всей видимости, команда разработчиков Visual Studio не считает эту ошибку достаточно серьёзным делом, чтобы ломать о неё копья.

      Выбор в контекстном меню элемента Свойства

      4. Но мало просто создать форму, нужно вплести её в создаваемую программу. Для этого в "Solution Explorer" правой кнопкой мыши на названии проекта, во всплывшем контексном меню выбрать Properties .

      Выбор содсистемы (SubSystem)

      В открывшемся окне произвести два действия.
      • Linker > System > SubSystem , из раскрывающегося списка выбрать " Windows (/SUBSYSTEM:WINDOWS) "

      Прописывание точки привязки (Entry Point)

      • Linker > Advanced > Entry Point . В пустое поле вписать " main " (без кавычек).

      5. В "Solution Explorer" двойным щелчком открыть в редакторе файл MyForm.cpp. Скопировать в него текст

      Отлично, всё готово! Теперь проект компилируем и запускаем. Но если у вас ранее выскакивала 0x8000000A, то быстрее всего вам придётся перезапустить Visual Studio и вновь загрузить в нём проект. Далее ошибка ни в чём не проявится.

      Вызов панели Toolbox, также показана сама панель

      6. Для того, чтобы добавить на нашу только что созданную форму новые элементы, понадобится панель Toolbox. Полезно запомнить горячую клавишу ^!X

      Работа с размещением элементов на форме сложностей вызвать не должна. Работает здесь всё удобнее, чем wxWidgets в CodeBlocks или wxDev-C++. Никаких глюков мною замечено не было.

      Для изменения свойств только что созданного элемента интерфейса щёлкните на нём правой кнопкой и в контекстном меню выберите, соответственно, Properties.

      Испытаем кнопку в работе. Сделаем так, чтобы по её названию появлялось окно с умным текстом. Двойной щелчок по элементу на форме вызовет редактор кода с уже прописанным в нём шаблоном. Добавим внутрь фигурных скобок команду

      MessageBox::Show("Hello World",
      "My heading", MessageBoxButtons::OKCancel,
      MessageBoxIcon::Asterisk);

      Работающее простейшее графическое приложение, созданное в VS2017

      Запускаем и проверяем!

      Список Solution Configuration, выставленный на Release

      Если вдруг не запустится, то первым делом проверяем, что выставлено в раскрывающемся списке Solution Configurations . Он находится на панели инструментов (под главным меню). Там должно быть Release (а не Debug) .

      Дополнительная информация

      Альтернативные способы создания графических приложений в Visual Studio 2017.

      1. UWP (Universal Windows Platfrom application) - универсальные приложения, способные запускаться на Windows 10, Windows 10 Mobile и аналогичных самых современных платформах от Microsoft. Платформа разработана как расширение Windows Runtime. Всё бы хорошо, но данные приложения не могут запускаться на более старых версиях Windows, даже на восьмёрке.

      Пара слов для общего развития о нескольких технологиях, на которые вы будете постоянно натыкаться при чтении документации по разработке GUI в Visual Studio.

      ATL (Active Template Library) - набор шаблонных классов языка C++, предназначенных для упрощения написания COM-компонентов.
      MFC (Microsoft Foundation Classes) - библиотека объектов, помогающая профессиональным разработчикам создавать десктопные приложения. Что-то вроде более усложнённого и навороченного варианта ATL. ATL и MFC являются хорошими вещами, и с их задействованием также можно создавать графические приложения. Но это инструменты, требующие наличия углублённых знаний тематики.

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

      Примечания:
      В интернете можно наткнуться на заголовок "Full C and C++ IDE with Visual Studio". Оттуда закачиваются те же самые стандартные дистрибутивы Visual Studio, проверено по контрольным суммам.

      Код и внешний вид простейшего графического калькулятора

      P.S.
      Теперь можно немного поэкспериментировать с элементами интерфейса. Ниже показан код простейшего графического калькулятора:

      private: System::Void button6_Click(System::Object^ sender, System::EventArgs^ e) Application::Exit();
      >

      private: System::Void radioButton1_CheckedChanged(System::Object^ sender, System::EventArgs^ e) label1->Text = "+";
      >
      private: System::Void radioButton2_CheckedChanged(System::Object^ sender, System::EventArgs^ e) label1->Text = "-";
      >
      private: System::Void radioButton3_CheckedChanged(System::Object^ sender, System::EventArgs^ e) label1->Text = "*";
      >
      private: System::Void radioButton4_CheckedChanged(System::Object^ sender, System::EventArgs^ e) label1->Text = "/";
      >

      private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) char sw = System::Convert::ToChar(label1->Text);
      double a = System::Convert::ToDouble(textBox1->Text);
      double b = System::Convert::ToDouble(textBox2->Text);
      double r;
      switch (sw) case '+':
      r = a + b;
      break;
      case '-':
      r = a - b;
      break;
      case '*':
      r = a * b;
      break;
      case '/':
      r = a / b;
      break;
      >
      label2->Text = "Result: " + System::Convert::ToString(r);
      >

      Простой стандандартный windows-калькулятор

      А теперь можно попытаться сотворить что-то более похожее на стандартное window-приложение. Пока простейшее.

      double iFirstNum;
      double iSecondNum;
      double iResult;
      String^ iOperator;

      private: System::Void btnC_Click(System::Object^ sender, System::EventArgs^ e) /*button C ("Global Clear" - clears the entire calculation*/
      tbDisplay->Text = "0";
      lblShowOp->Text = "";
      >

      private: System::Void btnCE_Click(System::Object^ sender, System::EventArgs^ e) <
      /*button CE ("Clear Entry" is supposed to be used to clear only the thing you are currently
      typing into the calculator, before you have performed any operation on it.*/
      tbDisplay->Text = "0";
      >

      private: System::Void buttonS_Number_Click(System::Object^ sender, System::EventArgs^ e) <
      //Number Buttons Event
      Button ^ Numbers = safe_cast<Button^>(sender);
      if (tbDisplay->Text == "0")
      tbDisplay->Text = Numbers->Text;
      else
      tbDisplay->Text += Numbers->Text;
      >

      private: System::Void buttonS_Arithmetic_Click(System::Object^ sender, System::EventArgs^ e) <
      //Operator Buttons Event
      Button ^ op = safe_cast<Button^>(sender);
      iFirstNum = Double::Parse(tbDisplay->Text);
      tbDisplay->Text = "0";
      iOperator = op->Text;
      lblShowOp->Text = System::Convert::ToString(iFirstNum) + " " + iOperator;
      >

      private: System::Void btnEquals_Click(System::Object^ sender, System::EventArgs^ e) <
      //Equals
      iSecondNum = Double::Parse(tbDisplay->Text);

      if (iOperator == "+")
      iResult = iFirstNum + iSecondNum;
      else if (iOperator == "-")
      iResult = iFirstNum - iSecondNum;
      else if (iOperator == "*")
      iResult = iFirstNum * iSecondNum;
      else if (iOperator == "/")
      iResult = iFirstNum / iSecondNum;
      else MessageBox::Show("Unknown operation.\nSomething wrong.",
      "error", MessageBoxButtons::OK,
      MessageBoxIcon::Error);
      return;
      >

      private: System::Void btnDot_Click(System::Object^ sender, System::EventArgs^ e) <
      //Decimal Point
      if (!tbDisplay->Text->Contains("."))
      tbDisplay->Text += ".";
      >

      private: System::Void btnPM_Click(System::Object^ sender, System::EventArgs^ e) <
      //Plus-Minus
      if (tbDisplay->Text->Contains("-"))
      tbDisplay->Text = tbDisplay->Text->Remove(0, 1);
      else
      tbDisplay->Text = "-" + tbDisplay->Text;
      >

      Код создан на основе видеоролика
      "Visual C++ Calculator Tutorial with Decimal Point and Backspace" (37:59, DJ Oamen, 2016 Jan 2, Visual C++ 2010) ,
      но имеет ряд отличий.

      Как продолжение, существует видеоролик
      "Visual C++ Scientific Calculator Tutorial" (53:31, Paul Oamen, 2016 Oct 2, Visual Studio 2015). Судя по голосу, автор тот же. К показанному выше калькулятору прибавляется конвертер температуры и ряд более научных функций. Предупрежу, что итоговое "творение" имеет массу изъянов и глюков, поэтому видео можно просматривать исключительно для изучение приёмов программирования. Но не используйте его в качестве образца того, как нужно создавать калькуляторы.

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