При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан. Затем: Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз. |
Введение в windows-формы
Режимы дизайна и кода
При создании нового проекта запускается режим дизайна — форма представляет собой основу для расположения элементов управления. Для работы с программой следует перейти в режим кода. Это можно сделать нескольким способами: щелкнуть правой кнопкой мыши в любой части формы и в появившемся меню выбрать View Code, в окне Solution Explorer сделать то же самое на компоненте Form 1.cs или просто дважды щелкнуть на форме — при этом сгенерируется метод Form1_Load. После хотя бы однократного перехода в режим кода в этом проекте появится вкладка Form1.cs* (см. рис. рис. 1.19), нажимая на которую, тоже можно переходить в режим кода. Для перехода в режим кода также можно использовать клавишу F7, а для возврата в режим дизайна — сочетание Shift+F7.
Переключимся в режим кода и рассмотрим некоторые блоки.
Данный блок определяет, какие пространства имен используются в этом проекте:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;
Для просмотра информации о содержимом каждого из этих пространств можно воспользоваться окном Object Browser.
Далее определяется собственное пространство имен, имя которого совпадает с названием проекта:
namespace FirstForm
При необходимости это название можно менять.
Класс формы Form1, наследуемый от System.Windows.Forms.Form, содержит в себе почти весь код:
public class Form1 : System.Windows.Forms.Form { … }
Внутри этого класса находится конструктор формы:
public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // }
Событие Initiliaze происходит в момент запуска приложения; код, добавляемый после InitializeComponent, может изменять содержимое формы или элементы управления в момент запуска.
Область Windows Form Designer generated code содержит код графического интерфейса элементов управления и формы, автоматически генерируемый средой. Пустая форма содержит описание размеров и заголовка. Щелкните на знак (+) для просмотра этой области:
#region Windows Form Designer generated code /// <summary> /// Required method for Designer support — do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.Size = new System.Drawing.Size(300,300); // размер формы в пикселях this.Text = "Form1";// заголовок формы. } #endregion
Можно менять значения параметров, создаваемые средой, и тогда изменения немедленно отразятся на графическом интерфейсе. Концепция области Windows Form Designer generated code схожа с концепцией WYSIWYG 1WYSIWYG — "What You See Is What You Get" — "Что видишь, то и получаешь". редакторов HTML-кода, где можно размещать компоненты перетаскиванием, а среда сама генерирует HTML-код.
Метод Main реализует главную точку входа в программу — то есть место, откуда начинается выполнение написанного нами кода:
static void Main() { Application.Run(new Form1()); }
При отладке больших программ удобно использовать нумерацию строк, которую можно включить в пункте меню Tools/Options…/Text Editor/C# — на форме Display — галочка Line Numbers (рис. 1.20).
При долгой работе над кодом контрастные черные буквы на белом фоне вызывают усталость, поэтому желательно в качестве фонового цвета установить другой — например, серый. Это можно сделать в Options на вкладке Environments/Font and Colors (рис. 1.21).
Рис. 1.21. Вкладка Environments/Font and Colors. Здесь же можно сменить шрифт кода — например, установить Times New Roman
В результате режим кода принимает следующий вид (рис. 1.22):
Свойства проекта
Рассмотрим свойства проекта. В окне Solution Explorer выделяем название проекта — FirstForm, щелкаем правой кнопкой мыши и выбираем в меню пункт Properties. В появившемся окне содержатся все свойства текущего проекта (рис. 1.23).
В окне свойств содержится довольно много параметров. Рассмотрим некоторые, наиболее употребительные.
Вкладка Common Properties / General включает в себя следующие свойства:
- Assembly Name — название сборки (подробнее о сборках см. "Создание пакетов установки" )
- Output Type — тип компилируемого приложения. По умолчанию для Windows-приложений стоит Windows Application.
- Default Namespace — название пространства имен в коде. По умолчанию совпадает с именем проекта.
- Startup Object — название класса, содержащего точку входа в программу – метод Main.
- Application Icon — путь к файлу с иконкой приложения.
- Project File — имя файла с информацией о проекте. Находится внутри папки с проектом;
- Project Folder — путь к файлу с проектом.
- Output File — название файла, создаваемого при компиляции, — выходного файла. Совпадает с именем проекта.
На вкладке Configuration Properties / Build рассмотрим некоторые свойства (рис. 1.24).
- Optimize Code — оптимизация программы, значение этого свойства true может значительно увеличить производительность приложения.
- Allow Unsafe Code Blocks — разрешить использование ключевого слова unsafe в коде проекта.
- Warning Level — уровень предупреждений, отображаемых при компиляции программы.
- Treat Warnings As Errors — воспринимать все предупреждения как ошибки. Если объявить переменную в коде, но нигде не использовать ее, при значении этого свойства False приложение скомпилируется, при значении True — нет.
- Output Path — путь, где формируется выходной файл. Папка bin находится внутри папки проекта.
- Generate Debugging Information — выводить информацию при отладке. Это свойство должно быть включено: именно эти сообщения помогают исправлять код.