netlib.narod.ru< Назад | Оглавление | Далее >

Глава 2. Hello, Windows Forms

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

Но в чем же разница между консольным и Windows-приложением? Интересно, что эта разница не столь отчетлива, как кажется. Одно и то же приложение может содержать элементы и консольного, и Windows-приложения. Приложение может запускаться как консольное, затем становиться Windows-приложением, а потом снова превращаться в консольное. Windows-приложения также могут без проблем использовать вывод на консоль. Консольное приложение может показывать информационное окно Windows для сообщения об ошибке, а затем продолжать вывод на консоль, после того как пользователь закроет информационное окно.

Для компилятора С# разница между консольным приложением и Windows-приложением определяется ключом компилятора target (его можно сократить до t). Консольное приложение создается с помощью ключа:

  /target:exe

Он же действует по умолчанию, если ключ target не указан. Для создания исполняемого файла Windows служит:

  /target:winexe

Кроме того, ключ target может иметь значение library или module. В Microsoft Visual Studio .NET используется диалоговое окно Property Pages. В разделе General Common Properties установите для параметра Output Type значение Console Application или Windows Application.

Этот ключ компилятора не делает ничего особо сложного. Он лишь устанавливает в исполняемом файле флажок, показывающий, как загружать и запускать программу. Если исполняемый файл помечен как консольное приложение и запускается из Windows, ОС Windows создает окно командной строки, в котором программа запускается и осуществляет вывод на консоль. Если консольное приложение запускается из окна командной строки, то приглашение MS-DOS не появляется снова до тех пор, пока программа не завершится. Если исполняемый файл помечен как приложение Windows, окно командной строки не создается, и программа ничего не выводит на консоль. При запуске такой программы из окна командной строки, приглашение MS-DOS появляется снова сразу же после запуска программы. Таким образом, если скомпилировать приложение Windows Forms как консольное, ничего плохого не случится!

Следует иметь в виду, что окно командной строки ведет себя по-разному в зависимости от того, как запускается программа — в режиме окончательной версии (release mode) или в режиме отладки (debug mode), В первом случае по завершении работы программы вы увидите стандартное сообщение «Press any key to continue». Благодаря этому, вы сможете посмотреть информацию, выведенную на консоль, и после ее просмотра закрыть окно. Во втором — после запуска программы из Windows окно консоли исчезает без предупреждения сразу по завершении работы программы. Приходится смотреть вывод на консоль до завершения работы программы.

Во всех файлах проектов Visual Studio .NET, относящихся к программам этой книги, указано, что программы являются консольными приложениями. Поэтому при их выполнении сначала появляется окно командной строки. Консоль весьма полезна: если нужно посмотреть, что происходит внутри программы, можно вставить операторы Console.Write или Console.WriteLine в любом месте любой программы этой книги. (Но, как я уже говорил, если вы запустите программу в режиме отладки и завершите программу, посмотреть вывод этих операторов вы не сможете. Кроме того, в этом случае не помещайте операторы Write или WriteLine после закрытия окна программы.) Почти все загадки, связанные с работой программ, поможет разгадать пара операторов Console.WriteLine. Кроме того, в пространстве имен System.Diagnostics есть класс Debug, который можно использовать для этих целей вместо класса Console.

Конечно, я бы не стал поставлять Windows-программу, скомпилированную как консольное приложение, пользователям, не являющимся разработчиками. Их могло бы смутить появление окна командной строки, если только они не имеют опыта работы с UNIX или UNIX-подобными средами. Но это всего лишь ключ компилятора, который можно изменить в любое время.

Настоящее отличие между консольным приложением и Windows-приложением заключается в способе получения программой входных данных от пользователя. В консольное приложение информация вводится с клавиатуры при помощи методов Console.Read или Console.ReadLine; в приложение Windows Forms информация вводится с клавиатуры (и других устройств) при помощи событий (events), которым в этой книге уделено большое внимание.

Я создавал проекты этой главы в Visual Studio .NET почти так же, как проекты главы 1. Я указывал, что это проект С#, а также Empty Project (пустой проект). При создании программы в проекте я воспользовался командой меню Add New Item и выбрал Local Project Item и Code File. Это запрещает Visual Studio .NET генерировать код за меня. В этой книге мы будем писать свой собственный код.

Учтите, что компилятору C# необходим доступ к ряду дополнительных DLL, являющихся частью среды .NET Common Language Runtime (CLR). Если вы запускаете компилятор C# из командной строки, вам необходимо включить ссылки на них в ключ r компилятора:

  /r:System.dll,System.Windows.Forms.dll,System.Drawing.dll

Вам также необходимо указать эти три файла в Visual Studio .NET. В Solution Explorer щелкните правой кнопкой мыши элемент References, расположенный под именм проекта, и в появившемся контекстном меню выберите команду Add Reference. (Вы также можете выбрать команду Add Reference в меню Project.) Из списка, находящегося в предложенном вам диалоговом окне, выберите следующие три элемента:

Если у вас несколько проектов сгруппированы в решение Visual Studio .NET (именно так организованы проекты для этой книги), вам достаточно указать эти файлы только в первом проекте. Затем вы можете выбрать эти три файла в Solution Explorer в разделе References того проекта, где они указаны, и перетащить их в раздел References всех последующих проектов.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz