- Введение в Windows Forms
- Создание графического приложения
- Запуск приложения
- BestProg
- Создание приложения типа Windows Forms Application в MS Visual Studio — C++ . Обзор основных файлов проекта
- Выполнение
- Использование пространств имен. (Руководство по программированию в C#) Using namespaces (C# Programming Guide)
- Доступ к пространствам имен Accessing namespaces
- Псевдонимы пространств имен Namespace aliases
- Использование пространств имен для управления областью действия Using namespaces to control scope
- Полные имена Fully qualified names
Введение в Windows Forms
Для создания графических интерфейсов с помощью платформы .NET применяются разные технологии — Window Forms, WPF, приложения для магазина Windows Store (для ОС Windows 8/8.1/10). Однако наиболее простой и удобной платформой до сих пор остается Window Forms или формы. Данное руководство ставит своей целью дать понимание принципов создания графических интерфейсов с помощью технологии WinForms и работы основных элементов управления.
Создание графического приложения
Для создания графического проекта нам потребуется среда разработки Visual Studio. Поскольку наиболее распространенная пока версия Visual Studio 2013, то для данного руководства я буду использовать бесплатную версию данной среды Visual Studio Community 2013 которую можно найти на странице https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx.
После установки среды и всех ее компонентов, запустим Visual Studio и создадим проект графического приложения. Для этого в меню выберем пункт File (Файл) и в подменю выберем New — > Project (Создать — > Проект). После этого перед нами откроется диалоговое окно создания нового проекта:
В левой колонке выберем Windows Desktop , а в центральной части среди типов проектов — тип Windows Forms Application и дадим ему какое-нибудь имя в поле внизу. Например, назовем его HelloApp. После этого нажимаем OK.
После этого Visual Studio откроет наш проект с созданными по умолчанию файлами:
Большую часть пространства Visual Studio занимает графический дизайнер, который содержит форму будущего приложения. Пока она пуста и имеет только заголовок Form1. Справа находится окно файлов решения/проекта — Solution Explorer (Обозреватель решений). Там и находятся все связанные с нашим приложением файлы, в том числе файлы формы Form1.cs.
Внизу справа находится окно свойств — Properties. Так как у меня в данный момент выбрана форма как элемент управления, то в этом поле отображаются свойства, связанные с формой.
Теперь найдем в этом окне свойство формы Text и изменим его значение на любое другое:
Таким образом мы поменяли заголовок формы. Теперь перенесем на поле какой-нибудь элемент управления, например, кнопку. Для этого найдем в левой части Visual Studio вкладку Toolbox (Панель инструментов) . Нажмем на эту вкладку, и у нас откроется панель с элементами, откуда мы можем с помощью мыши перенести на форму любой элемент:
Найдем среди элементов кнопку и, захватив ее указателем мыши, перенесем на форму:
Это визуальная часть. Теперь приступим к самому программированию. Добавим простейший код на языке C#, который бы выводил сообщение по нажатию кнопки. Для этого мы должны перейти в файл кода, который связан с этой формой. Если у нас не открыт файл кода, мы можем нажать на форму правой кнопкой мыши и в появившемся меню выбрать View Code (Посмотреть файл кода):
Однако воспользуемся другим способом, чтобы не писать много лишнего кода. Наведем указатель мыши на кнопку и щелкнем по ней двойным щелчком. Мы автоматически попадаем в файл кода Form1.cs, который выглядит так:
Добавим вывод сообщения по нажатию кнопки, изменив код следующим образом:
Запуск приложения
Чтобы запустить приложение в режиме отладки, нажмем на клавишу F5 или на зеленую стрелочку на панели Visual Studio. После этого запустится наша форма с одинокой кнопкой. И если мы нажмем на кнопку на форме, то нам будет отображено сообщение с приветствием.
После запуска приложения студия компилирует его в файл с расширением exe. Найти данный файл можно, зайдя в папку проекта и далее в каталог bin/Debug или bin/Release
Рассмотрев вкратце создание проекта графического приложения, мы можем перейти к обзору основных компонентов и начнем мы с форм.
BestProg
Создание приложения типа Windows Forms Application в MS Visual Studio — C++ . Обзор основных файлов проекта
В данной теме рассмотрены особенности создания приложения типа Windows Forms Application с поддержкой языка C++ . Такой тип приложения поддерживает все преимущества технологии .NET Framework .
Выполнение
1. Загрузить Microsoft Visual Studio .
В результате будет создано окно с активной вкладкой Start Page (рисунок 1).
Рисунок 1. Окно Microsoft Visual Studio
2. Создание приложения типа Windows Forms Application
Чтобы создать новый проект (решение) на языке C++ , нужно выбрать последовательность команд (рис. 2):
Система Microsoft Visual Studio предлагает разные виды шаблонов приложения для программирования на языке C++ (рис. 2).
Рисунок 2. Вызов команды создания нового проекта
В результате откроется окно « New Project » (рисунок 3), в котором нужно выбрать шаблон « Visual C++ » и тип приложения Windows Forms Application .
В поле « Location: » надо задать путь к папке, в которой будет сохранен проект. В нашем случае задан следующий путь
В поле Name задается имя приложения. В нашем случае это имя « MyApp01 «.
Если включена опция « Create directory for solution » (создать директорию для решения), то проект будет сохранен в папке
В поле « Solution name: » задается имя решения. Решение ( solution ) может объединять в себе несколько проектов. В нашем случае имя решения остается таким как и имя проекта.
Рисунок 3. Окно « New Project » создания нового проекта
3. Основные элементы оконного интерфейса для работы с программой
После выбора «ОК» в предыдущем окне « New Project «, система Microsoft Visual Studio создаст весь необходимый код для работы приложения типа Windows Forms Application .
В результате окно Microsoft Visual Studio примет вид как показано на рисунке 4.
В окне, в центре отображается основная форма приложения. На этой форме можно размещать компоненты. Компоненты размещаются на панели Toolbox (левая часть экрана).
Свойства формы или компонента отображаются в утилите Solution Explorer (правая часть экрана). Изменяя эти свойства, можно влиять на вид формы, поведение формы, реализовывать обработчики событий формы и прочее.
Рисунок 4. Основные элементы окна приложения
4. Вызов режима ввода кода
На данный момент активным есть режим проектирования формы. Чтобы перейти в режим набора текста программы, нужно вызвать команду Code с меню View (рисунок 5):
Рисунок 5. Команда перехода в режим набора текста программы
Другой вариант вызова команды перехода в режим набора текста, это клик на соответствующей кнопке в Solution Explorer (рисунок 6).
Рисунок 6. Кнопка перехода в режим набора текста программы
В результате отобразится текст программы.
Рисунок 7. Режим просмотра текста программы
5. Текст модуля « Form1.h «
При создании проекта, система Microsoft Visual Studio генерирует программный код, который сохраняется в различных файлах.
Главным файлом, в котором программист создает собственный код программы, есть файл « Form1.h «. Этот файл соответствует главной форме приложения. На главной форме размещаются различные компоненты. С помощью этих компонент реализуется решение конкретной задачи. При создании проекта создается пустая форма (рисунок 6). Кроме главной формы можно создавать другие формы и добавлять их к проекту.
Листинг файла « Form1.h » следующий.
Объясним некоторые фрагменты кода в тексте программы.
В вышеприведенном тексте создается пространство имен MyApp01 с помощью оператора
В этом пространстве имен подключаются другие пространства имен из библиотеки .NET Framework :
В пространстве имен MyApp01 создается класс с именем Form1. Этот класс соответствует главной форме приложения Form1.
Класс содержит конструктор, который вызывает метод
В методе InitializeComponent() создается компонента-форма (переменная components ), которая есть контейнером. Это означает, что на форме могут размещаться другие компоненты (кнопки, метки, поля ввода и т.д.). Также в методе InitializeComponent() настраиваются параметры формы: название заголовка, размер (300 * 300 пикселей), шрифт по умолчанию.
Form1() уничтожает форму (переменная components ) с помощью оператора delete .
6. Файлы, которые создаются в проекте
После создания проекта типа Windows Forms Application система Microsoft Visual Studio создает несколько файлов.
Рисунок 8. Файлы C++ , которые создаются в проекте типа Windows Forms Application
Как было сказано раньше, главным файлом есть файл « Form1.h » (см. п. 5). Также, согласно правилам языка C++ , создается файл реализации « MyApp01.cpp «. В этом файле есть главная функция main() . Этот файл содержит код отображающий главную форму.
Листинг файла « MyApp01.cpp » следующий:
Файл « MyApp01.vcxproj «. Это главный файл проектов на Visual C++ , которые генерируются с использованием мастера приложений ( Application Wizard ). В нем содержится информация о версии Visual C++ , в которой сгенерирован файл, информация о платформах, настройках и особенностях (характеристиках) проекта выбранных с помощью мастера приложений ( Application Wizard ).
Файл « MyApp01.vcxproj.filters «. Это есть файл фильтров для сгенерированных проектов на Visual C++ с использованием мастера приложений ( Application Wizard ). В нем содержится информация об ассоциации между файлами в вашем проекте и фильтрами. Эта ассоциация используется в интегрированной среде, чтобы показать группирование файлов с одинаковыми расширениями.
Файл « AssemblyInfo.cpp «. Содержит пользовательские атрибуты для модификации данных сборки.
Файли « StdAfx.h » и « StdAfx.cpp «. Они используются для создания файла скомпилированных заголовков ( PCH ) с именем « MyApp01.pch » и скомпилированных типов названных « StdAfx.obj «.
7. Запуск проекта на выполнение
Для запуска проекта на выполнение используется команда Start Debuggin из меню Debug (клавиши F5).
Использование пространств имен. (Руководство по программированию в C#) Using namespaces (C# Programming Guide)
Пространства имен часто используются в программировании на C# двумя способами. Namespaces are heavily used within C# programs in two ways. Первый способ — для упорядочения классов .NET используются пространства имен. Firstly, the .NET classes use namespaces to organize its many classes. Второй способ — объявление собственных пространств имен поможет вам контролировать область имен классов и методов в более крупных проектах. Secondly, declaring your own namespaces can help control the scope of class and method names in larger programming projects.
Доступ к пространствам имен Accessing namespaces
Большинство приложений на языке C# начинается с раздела директив using . Most C# applications begin with a section of using directives. В этом разделе перечисляются пространства имен, которые будут часто использоваться приложением, благодаря чему программист может не указывать их полные названия каждый раз, когда вызывается содержащийся в них метод. This section lists the namespaces that the application will be using frequently, and saves the programmer from specifying a fully qualified name every time that a method that is contained within is used.
Например, включив строку For example, by including the line:
в начале программы, программист может использовать код At the start of a program, the programmer can use the code:
вместо следующего кода: Instead of:
Псевдонимы пространств имен Namespace aliases
Можно также использовать директиву using для создания псевдонимов пространства имен. You can also use the using directive to create an alias for a namespace. Используйте квалификатор псевдонима пространства имен :: для доступа к членам пространства имен, обозначенного псевдонимом. Use the namespace alias qualifier :: to access the members of the aliased namespace. В следующем примере показано, как создать и использовать псевдоним для пространства имен. The following example shows how to create and use a namespace alias:
Использование пространств имен для управления областью действия Using namespaces to control scope
Область действия объявляется с помощью ключевого слова namespace . The namespace keyword is used to declare a scope. Определяя области действия в проекте, вы можете упорядочивать код и создавать уникальные на глобальном уровне типы. The ability to create scopes within your project helps organize code and lets you create globally-unique types. В следующем примере класс SampleClass определяется в двух пространствах имен, одно из которых вложено в другое. In the following example, a class titled SampleClass is defined in two namespaces, one nested inside the other. Для определения конкретного вызываемого метода используется маркер . . The . token is used to differentiate which method gets called.
Полные имена Fully qualified names
Пространства имен и типы имеют уникальные названия, которые описываются полными именами, определяющими их место в логической иерархии. Namespaces and types have unique titles described by fully qualified names that indicate a logical hierarchy. Например, инструкция A.B указывает, что A — это пространство имен или тип, а B — вложенный в него элемент. For example, the statement A.B implies that A is the name of the namespace or type, and B is nested inside it.
В следующем примере показаны вложенные классы и пространства имен. In the following example, there are nested classes and namespaces. Полное имя каждого элемента указано в комментарии рядом с ним. The fully qualified name is indicated as a comment following each entity.
В предыдущем фрагменте кода: In the previous code segment:
Пространство имен N1 является членом глобального пространства имен. The namespace N1 is a member of the global namespace. Его полное имя: N1 . Its fully qualified name is N1 .
Пространство имен N2 является членом пространства имен N1 . The namespace N2 is a member of N1 . Его полное имя: N1.N2 . Its fully qualified name is N1.N2 .
Класс C1 является членом пространства имен N1 . The class C1 is a member of N1 . Его полное имя: N1.C1 . Its fully qualified name is N1.C1 .
В этом коде имя класса C2 используется два раза. The class name C2 is used two times in this code. Тем не менее полные имена являются уникальными. However, the fully qualified names are unique. Первый экземпляр C2 объявляется в классе C1 . Соответственно, его полное имя: N1.C1.C2 . The first instance of C2 is declared inside C1 ; therefore, its fully qualified name is: N1.C1.C2 . Второй экземпляр C2 объявляется в пространстве имен N2 . Соответственно, его полное имя: N1.N2.C2 . The second instance of C2 is declared inside a namespace N2 ; therefore, its fully qualified name is N1.N2.C2 .
Используя представленный выше фрагмент кода, вы можете добавить новый элемент класса C3 в пространство имен N1.N2 , как показано выше: Using the previous code segment, you can add a new class member, C3 , to the namespace N1.N2 as follows:
В общем случае следует использовать квалификатор псевдонима пространства имен :: для ссылки на псевдоним пространства имен или global:: для ссылки на глобальное пространство имен, а также . для определения типов или элементов. In general, use the namespace alias qualifier :: to reference a namespace alias or global:: to reference the global namespace and . to qualify types or members.
Использование :: с псевдонимом, ссылающимся на тип вместо пространства имен, будет ошибкой. It is an error to use :: with an alias that references a type instead of a namespace. Пример: For example:
Помните, что слово global не является предопределенным псевдонимом и, соответственно, выражение global.X не имеет какого-либо конкретного значения. Remember that the word global is not a predefined alias; therefore, global.X does not have any special meaning. Конкретное значение будет получено только при его использовании вместе с :: . It acquires a special meaning only when it is used with :: .
Если определить псевдоним с именем global, возникнет предупреждение компилятора CS0440. Это связано с тем, что global:: всегда ссылается на глобальное пространство имен, а не на псевдоним. Compiler warning CS0440 is generated if you define an alias named global because global:: always references the global namespace and not an alias. Например, предупреждение возникнет в следующем случае: For example, the following line generates the warning:
При работе с псевдонимами рекомендуется использовать :: , поскольку это обеспечивает защиту от случайного определения дополнительных типов. Using :: with aliases is a good idea and protects against the unexpected introduction of additional types. Рассмотрим следующий пример: For example, consider this example:
Этот код будет работать, однако если впоследствии определить тип с именем Alias , выражение Alias. будет связываться с этим типом. This works, but if a type named Alias were to subsequently be introduced, Alias. would bind to that type instead. Используя выражение Alias::Exception , вы гарантируете, что Alias будет обрабатываться как псевдоним пространства имен и не будет ошибочно связываться с типом. Using Alias::Exception ensures that Alias is treated as a namespace alias and not mistaken for a type.