|
При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан. Затем: Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз. |
Введение в windows-формы
XML-документирование кода
При написании комментариев к коду приложения Calculator я использовал XML-комментарии. Для вставки XML-комментария достаточно трижды поставить знак слэша — ///, среда сама откроет тег, где уже можно вводить текст комментария. Использование такого способа документирования более удобно, чем обычное комментирование, — можно переносить слова на следующую строку без добавления знака комментария. Но самое главное — компилятор транслирует эти комментарии в отдельный XML-файл. Откройте окно Solution Explorer проекта Calculator и щелкните правой кнопкой на его названии. В появившемся контекстном меню выберите пункт Properties. На вкладке Configuration Properties/Build (см. рис. рис. 1.24) в поле XML Documentation File введите название выходного файла — CalcDescription.xml. Скомпилируйте приложение. Запустите проводник Windows (клавиша Windows+E) и перейдите в папку, содержащую проект Calculator. В ней появился созданный нами файл CalcDescription.xml, содержимое которого представляет собой обычный XML- документ:
<?xml version="1.0" ?> <doc> <assembly> <name>Calculator</name> </assembly> <members> <member name="F:Calculator.Calc.odin"> <summary>Объявляем и инициализируем переменные, которые будут возникать на экране при нажатии соответствующих кнопок.</summary> </member> <member name="M:Calculator.Calc.Dispose(System.Boolean)"> <summary>Clean up any resources being used.</summary> </member> <member name="M:Calculator.Calc.InitializeComponent"> <summary>Required method for Designer support — do not modify the contents of this method with the code editor.</summary> </member> <member name="M:Calculator.Calc.Main"> <summary>The main entry point for the application.</summary> </member> <member name="M:Calculator.Calc.btn1_Click(System.Object,System.EventArgs)"> <summary>Обработчики для кнопок обращаются к методу chislonaEkrane класса mehanizmcalkulyatora и передают ему одну из постоянных (odin, dva, tri и т.д.). Результат, возвращаемый методом, присваивается свойству Text текстового поля txtOutput.</summary> </member> <member name="M:Calculator.Calc.btn_delenie_Click(System.Object,System.EventArgs)"> <summary>Обработчики кнопок действия калькулятора передают методу DeystvieCalculatora класса mehanizmcalkulyatora переменную перечисления Deystvie.</summary> </member> <member name="F:Calculator.mehanizmcalkulyatora.peremennayaMinus"> <summary>Объявляем и инициализируем переменную, которая будет использоваться для смены знака при нажатии клавиши (+/–)</summary> </member> <member name="F:Calculator.mehanizmcalkulyatora.resultatVichisleniy"> <summary>Объвляем переменные для работы калькулятора: resultatVichisleniy — переменная для хранения промежуточного результата в механизме калькулятора; resultatOutput — переменная, значение которой будет сниматься с экрана и выводиться на него; tekusheeDeystvieCalculatora — хранение одного из действий калькулятора; pervoeChislo — переменная, в которую будет записываться число на экране до нажатия на одну из четырех кнопок с действием; vtoroeChislo — второе число на экране; dobavlenierazryada — при добавлении следующего разряда эта переменная примет значение true; ChislosTochkoy — при добавлении десятичного разряда (знака точки) эта переменная примет значение true</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.#ctor"> <summary>В конструкторе класса mehanizmcalkulyatora инициализируем переменные ChislosTochkoy и dobavlenierazryada — при запуске калькулятора на экране нет ни разрядности, ни десятичной части.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.chislonaEkrane(System.String)"> <summary>В этом методе переменная resultatOutput изменяется — при вводе числа ее значение перезаписывается.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.DeystvieCalculatora (Calculator.mehanizmcalkulyatora.Deystvie)"> <summary>Метод, в котором определяется peremenDeystviya, — одно значение перечисления Deystvie, в зависимости от выбора клавиши +, – , *, или /</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.ZnakChisla"> <summary>При нажатии кнопки +/–- число на экране — tekusheeChislo умножается на –1, а затем результат снова присваивается переменной resultatOutput.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.ZnakTochki"> <summary>При нажатии кнопки ( , ) переменная resultatOutput приобретает дробную часть.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.ZnakRavno"> <summary>При нажатии кнопки ZnakRavno обрабатываются значения переменнных pervoeChislo и vtoroeChislo, результат присваивается переменной resultatVichisleniy, которая затем преобразуется в resultatOutput.</summary> </member> <member name="M:Calculator.mehanizmcalkulyatora.Sbros"> <summary>При нажатии кнопки С (сброс) значения переменных обнуляются.</summary> </member> <member name="T:Calculator.mehanizmcalkulyatora.Deystvie"> <summary>Создаем перечисление Deystvie для определения одного из четырех действий калькулятора.</summary> </member> </members> </doc>Листинг 1.10.
Файл получается довольно длинным, и читать его в таком формате неудобно, хотя и возможно. Однако XML-код можно преобразовать в HTML, написав XSLT-файл. Кроме того, XML-документ можно сохранить в специальной базе данных для документации.
Документирующие комментарии можно преобразовать в чрезвычайно удобную форму, сгенерировав в среде Visual Studio .NET отчет Code Comment Web Report. Выберите пункт меню Tools/Build Comment Web Pages. Результатом будет набор HTML-файлов, которые можно просмотреть непосредственно в Visual Studio .NET или с помощью браузера, перейдя в сформированную папку CodeCommentReport (рис. 1.48):
Для увеличения функциональности создаваемого отчета при XML-документировании кода можно использовать стандартные теги. Подробное обсуждение этих вопросов выходит за рамки этой книги.
Полный список тегов можно найти в документации, входящей в комплект Visual Studio .NET.
Создание иконки для приложения
Когда мы создаем новую форму, в заголовке располагается стандартная иконка —
. Наверняка ее вид не может устраивать нас для готового приложения. Можно, конечно, воспользоваться одним из файлов .ico, находящихся на нашем компьютере, или даже иконкой из коллекции, входящей в комплект поставки Microsoft Visual Studio .NET — мы это уже делали, но лучше нарисовать уникальную иконку во встроенном редакторе иконок. Итак, File/New/File (Ctrl+N) и выбираем IconFile:
Запускается редактор изображений Microsoft Visual Studio.NET, внешний вид которого имеет много общего с прочими графическими редакторами:
Можно определить размер рисунка и его цветовую схему — Image/New Image Type (Ins):
Оптимальным типом изображения для иконки нашего приложения будет 32x32, 256 colors.
После завершения работы над иконкой ее можно сохранить и затем выбрать ее в свойстве Icon формы.
Аналогично можно создавать изображения курсоров — Ctrl+N и далее Cursor File.



