Васильев А.Н. Основы программирования на C#. Васильев А. Н. Программирование
Скачать 5.54 Mb.
|
Рис. 8.20. Окно с группой переключателей и изображением волка Теперь в правой части окна вместо списка размещена группа переключателей. Установлен (выбран) может быть один и только один из них. В соответствии стем, какой переключатель установлен, в области метки отображается картинка с изображением животного. На рис. 8.21 показано окно с изображением медведя (в соответствии с выбранным пере- ключателем). Рис. 8.21. Окно с группой переключателей и изображением медведя Переключатель реализуется как объект класса RadioButton. Особенность переключателей в том, что они объединяются в группы ив группе может быть установлен только один переключатель. Поэтому мало собственно создать переключатели. Их еще нужно сгруппировать. Для этого создается объект для группы переключателей. Такой объект создается Приложения с графическим интерфейсом 419 на основе класса GroupBox. Все переключатели, добавленные в объект группы, образуют группу переключателей. В программе, кроме переключателей, появляется еще один новый для нас компонент. Это панель. Панель реализуется через объект класса Panel . Вообще панель — это прямоугольная область, главное назначение которой состоит в том, чтобы быть контейнером для размещения графических компонентов. В рассматриваемой далее программе создается панель, на эту панель помещается метка с изображением, группа переключателей и кнопка, а затем панель добавляется в окно. Как это выглядит на практике, показано в листинге Листинг 8.6. Использование переключателей System; using System.Drawing; using System.Windows.Forms; // Ʉɥɚɫɫ ɞɥɹ ɤɧɨɩɤɢ: class MyButton:Button{ // Ʉɨɧɫɬɪɭɤɬɨɪ: public MyButton(string name):base(){ // ɇɚɡɜɚɧɢɟ ɤɧɨɩɤɢ: this.Text=name; // Ɉɛɪɚɛɨɬɱɢɤ ɫɨɛɵɬɢɹ, ɫɜɹɡɚɧɧɨɝɨ ɫɨ ɳɟɥɱɤɨɦ // ɩɨ ɤɧɨɩɤɟ: this.Click+=(x,y)=>{ Application.Exit(); }; } } // Ʉɥɚɫɫ ɨɤɧɚ: class MyForm:Form{ // ɇɚɡɜɚɧɢɹ ɠɢɜɨɬɧɵɯ: private string[] animals={ ƎȼɨɥɤƎ,ƎɅɢɫɚƎ,ƎɆɟɞɜɟɞɶƎ,ƎȿɧɨɬƎ}; // ɇɚɡɜɚɧɢɹ ɮɚɣɥɨɜ ɫ ɢɡɨɛɪɚɠɟɧɢɹɦɢ: Глава 8 420 private string[] files={ Ǝwolf.jpgƎ,Ǝfox.jpgƎ,Ǝbear.jpgƎ,Ǝraccoon.jpgƎ}; // ɉɭɬɶ ɤ ɤɚɬɚɥɨɝɭ ɫ ɮɚɣɥɚɦɢ ɢɡɨɛɪɚɠɟɧɢɣ: private string path= ƎD:/Books/pictures/csharp/Ǝ; // ɂɧɞɟɤɫ ɩɟɪɟɤɥɸɱɚɬɟɥɹ, ɤɨɬɨɪɵɣ ɭɫɬɚɧɨɜɥɟɧ ɜ ɧɚɱɚɥɟ: private int index=0; // ɋɫɵɥɤɚ ɧɚ ɦɟɬɤɭ: private Label pict; // Ɇɚɫɫɢɜ ɫɫɵɥɨɤ ɧɚ ɩɟɪɟɤɥɸɱɚɬɟɥɢ: private RadioButton[] radio; // Ʉɨɧɫɬɪɭɤɬɨɪ: public MyForm():base(){ // ɒɢɪɢɧɚ ɨɤɧɚ: this.Width=310; // ȼɵɫɨɬɚ ɨɤɧɚ: this.Height=200; // Ɋɟɠɢɦ ɹɜɧɨɝɨ ɨɩɪɟɞɟɥɟɧɢɹ ɧɚɱɚɥɶɧɨɝɨ // ɩɨɥɨɠɟɧɢɹ ɨɤɧɚ: this.StartPosition=FormStartPosition.Manual; // Ʉɨɨɪɞɢɧɚɬɵ ɨɤɧɚ: this.Location=new Point(400,300); // Ɂɚɝɨɥɨɜɨɤ ɨɤɧɚ: this.Text= Ǝȼ ɦɢɪɟ ɠɢɜɨɬɧɵɯƎ; // Ɉɤɧɨ ɮɢɤɫɢɪɨɜɚɧɧɵɯ ɪɚɡɦɟɪɨɜ: this.FormBorderStyle=FormBorderStyle.FixedSingle; // Ɉɤɧɨ ɧɟɥɶɡɹ ɪɚɡɜɟɪɧɭɬɶ ɧɚ ɜɟɫɶ ɷɤɪɚɧ: this.MaximizeBox=false; // Ɉɛɴɟɤɬ ɩɚɧɟɥɢ: Panel pnl=new Panel(); // ɒɢɪɢɧɚ ɩɚɧɟɥɢ: pnl.Width=this.ClientSize.Width-10; // ȼɵɫɨɬɚ ɩɚɧɟɥɢ: pnl.Height=this.ClientSize.Height-10; Приложения с графическим интерфейсом // Ƚɨɪɢɡɨɧɬɚɥɶɧɚɹ ɤɨɨɪɞɢɧɚɬɚ ɩɚɧɟɥɢ: pnl.Left=5; // ȼɟɪɬɢɤɚɥɶɧɚɹ ɤɨɨɪɞɢɧɚɬɚ ɩɚɧɟɥɢ: pnl.Top=5; // Ɋɚɦɤɚ ɜɨɤɪɭɝ ɩɚɧɟɥɢ: pnl.BorderStyle=BorderStyle.FixedSingle; // Ɉɛɴɟɤɬ ɦɟɬɤɢ: pict=new Label(); // ɉɨɥɨɠɟɧɢɟ ɢ ɪɚɡɦɟɪɵ ɦɟɬɤɢ: pict.SetBounds(5,5,154,104); // Ɋɚɦɤɚ ɜɨɤɪɭɝ ɦɟɬɤɢ: pict.BorderStyle=BorderStyle.FixedSingle; // ɇɚɱɚɥɶɧɨɟ ɢɡɨɛɪɚɠɟɧɢɟ ɞɥɹ ɦɟɬɤɢ: pict.Image=Image.FromFile(path+files[index]); // Ⱦɨɛɚɜɥɟɧɢɟ ɦɟɬɤɢ ɧɚ ɩɚɧɟɥɶ: pnl.Controls.Add(pict); // ɋɨɡɞɚɧɢɟ ɦɚɫɫɢɜɚ ɫɫɵɥɨɤ ɧɚ ɨɛɴɟɤɬɵ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ: radio=new RadioButton[animals.Length]; // Ɉɛɴɟɤɬ ɞɥɹ ɝɪɭɩɩɵ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ: GroupBox gb=new GroupBox(); // Ʉɨɨɪɞɢɧɚɬɵ ɝɪɭɩɩɵ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ: gb.Left=pict.Right+5; gb.Top=pict.Top; // Ɋɚɡɦɟɪɵ ɝɪɭɩɩɵ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ: gb.Width=115; gb.Height=pict.Height; // Ɂɚɝɨɥɨɜɨɤ ɞɥɹ ɝɪɭɩɩɵ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ: gb.Text= Ǝȼɚɲ ɜɵɛɨɪƎ; // ɒɪɢɮɬ ɞɥɹ ɝɪɭɩɩɵ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ: gb.Font=new Font( ƎCourier NewƎ,12,FontStyle.Bold); // ȼɵɫɨɬɚ ɨɛɥɚɫɬɢ ɞɥɹ ɩɟɪɟɤɥɸɱɚɬɟɥɹ: int h=17; Глава 8 422 // ɋɨɡɞɚɧɢɟ ɨɛɴɟɤɬɨɜ ɞɥɹ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ ɢ ɞɨɛɚɜɥɟɧɢɟ // ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ ɜ ɝɪɭɩɩɭ: for(int k=0;k Ɉɛɴɟɤɬ ɩɟɪɟɤɥɸɱɚɬɟɥɹ: radio[k]=new RadioButton(); // ɉɨɞɩɢɫɶ ɞɥɹ ɩɟɪɟɤɥɸɱɚɬɟɥɹ: radio[k].Text=animals[k]; // ɋɨɫɬɨɹɧɢɟ ɩɟɪɟɤɥɸɱɚɬɟɥɹ (ɭɫɬɚɧɨɜɥɟɧ ɢɥɢ ɧɟɬ): radio[k].Checked=(k==index); // ɉɨɥɨɠɟɧɢɟ ɢ ɪɚɡɦɟɪɵ ɩɟɪɟɤɥɸɱɚɬɟɥɹ: radio[k].SetBounds(10,20+k*(h+4),100,h); // Ɉɛɪɚɛɨɬɱɢɤ ɞɥɹ ɫɨɛɵɬɢɹ, ɫɜɹɡɚɧɧɨɝɨ ɫ ɢɡɦɟɧɟɧɢɟɦ // ɫɨɫɬɨɹɧɢɹ ɩɟɪɟɤɥɸɱɚɬɟɥɹ: radio[k].CheckedChanged+=OnRadioClick; // Ⱦɨɛɚɜɥɟɧɢɟ ɩɟɪɟɤɥɸɱɚɬɟɥɹ ɜ ɝɪɭɩɩɭ: gb.Controls.Add(radio[k]); } // Ⱦɨɛɚɜɥɟɧɢɟ ɝɪɭɩɩɵ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ ɧɚ ɩɚɧɟɥɶ: pnl.Controls.Add(gb); // Ɉɛɴɟɤɬ ɤɧɨɩɤɢ: MyButton btn=new MyButton( ƎOKƎ); // ȼɵɫɨɬɚ ɤɧɨɩɤɢ: btn.Height=30; // ɒɢɪɢɧɚ ɤɧɨɩɤɢ: btn.Width=pnl.Width/3; // Ƚɨɪɢɡɨɧɬɚɥɶɧɚɹ ɤɨɨɪɞɢɧɚɬɚ ɤɧɨɩɤɢ: btn.Left=pnl.Width/3; // ȼɟɪɬɢɤɚɥɶɧɚɹ ɤɨɨɪɞɢɧɚɬɚ ɤɧɨɩɤɢ: btn.Top=pict.Bottom+5; // ɒɪɢɮɬ ɞɥɹ ɤɧɨɩɤɢ: btn.Font=gb.Font; // Ⱦɨɛɚɜɥɟɧɢɟ ɤɧɨɩɤɢ ɧɚ ɩɚɧɟɥɶ: Приложения с графическим интерфейсом pnl.Controls.Add(btn); // Ⱦɨɛɚɜɥɟɧɢɟ ɩɚɧɟɥɢ ɜ ɨɤɧɨ: this.Controls.Add(pnl); } // Ɇɟɬɨɞ ɞɥɹ ɨɛɪɚɛɨɬɤɢ ɫɨɛɵɬɢɣ, ɫɜɹɡɚɧɧɵɯ ɫ ɢɡɦɟɧɟɧɢɟɦ // ɫɨɫɬɨɹɧɢɹ ɩɟɪɟɤɥɸɱɚɬɟɥɹ: private void OnRadioClick(object obj,EventArgs ea){ // ɉɟɪɟɛɨɪ ɩɟɪɟɤɥɸɱɚɬɟɥɟɣ: for(int k=0;k ɉɪɨɜɟɪɤɚ ɫɨɫɬɨɹɧɢɹ ɩɟɪɟɤɥɸɱɚɬɟɥɹ: if(radio[k].Checked){ // ɇɨɜɨɟ ɢɡɨɛɪɚɠɟɧɢɟ ɞɥɹ ɩɢɤɬɨɝɪɚɦɦɵ: pict.Image=Image.FromFile(path+files[k]); // Ɂɚɜɟɪɲɟɧɢɟ ɜɵɩɨɥɧɟɧɢɹ ɦɟɬɨɞɚ: return; } } } } // Ƚɥɚɜɧɵɣ ɤɥɚɫɫ: class RadioButtonDemo{ [STAThread] // Ƚɥɚɜɧɵɣ ɦɟɬɨɞ: static void Main(){ // Ɉɬɨɛɪɚɠɟɧɢɟ ɨɤɧɚ: Application.Run(new MyForm()); Какие особенности этой программы Их несколько. Начнем с того, что в программе для кнопки описывается специальный класс MyButton. Класс создается наследованием класса Button. Конструктору класса передается текстовое значение, определяющее название кнопки. Также Глава для кнопки регистрируется обработчик события (анонимный метод на основе лямбда-выражения), связанного со щелчком по кнопке. Обработка состоит в том, что завершается выполнение программы. Таким образом, кнопки, реализованные в виде объектов класса MyButton, сразу функциональные — щелчок по такой кнопке приводит к завершению выполнения программы. В классе окна MyForm (подкласс класса Form) много знакомых мотивов. Но есть и новые команды и инструкции. Так, в классе имеется поле radio , которое является ссылкой на массив объектных переменных класса RadioButton. В конструкторе класса MyForm командой this. StartPosition=FormStartPosition.Manual выполняется переход в режим явного определения начального положения окна. Это положение определяется командой this.Location=new Point(400,300) от левого верхнего угла экрана окно отстоит по горизонтали на 400 пикселей и по вертикали — на 300 пикселей). Объект панели pnl создается командой Panel pnl=new Panel(). Ширина панели определяется командой pnl.Width=this.ClientSize. Width-10 . Это ширина клиентской области окна, уменьшенная на 10 пикселей. Высота панели определяется командой pnl.Height=this. ClientSize.Height-10 (высота клиентской области окна минус 10). { i НАЗ А МЕТКУ Клиентская область — это область внутри окна, доступная для размещения компонентов. Она немного меньше внешних параметров окна (с учетом того, что у окна есть рамка и строка названия). Координаты панели определяются командами pnl.Left=5 (горизонтальная координата) и pnl.Top=5 (вертикальная координата. Это координаты компонента (в данном случае панели) внутри контейнера которым будет окно. Рамка для панели определяется командой Объект метки pict создается на основе класса Label. Метка добавляется на панель командой pnl.Controls.Add(pict). Координаты, заданные для метки, — это координаты внутри контейнера. Для метки контейнером является панель. Изображение, которое задается для метки, определяется файлом, название которого содержится в массиве files с индексом index. Приложения с графическим интерфейсом 425 Массив со ссылками на объекты переключателей создаем командой radio=new RadioButton[animals.Length]. Размер массива определяется размером массива animals с названиями животных. Также командой GroupBox gb=new GroupBox() создается объект gb класса GroupBox (объект для группы переключателей. Координаты группы переключателей определяются командами gb.Left=pict.Right+5 и gb.Top=pict.Top. Таким образом, группа переключателей по высоте размещается на том же уровне, что и метка, а по горизонтали группа переключателей сдвинута на 5 пикселей по отношению к правой границе метки. Размеры группы переключателей определяются командами gb.Width=115 и gb.Height=pict.Height (высота группы переключателей такая же, как и высота метки. Заголовок для группы переключателей (отображается сверху над группой) определяется командой gb.Text= Ǝȼɚɲ ɜɵɛɨɪƎ. Также мы задаем шрифт и его начертание для группы переключателей (команда gb.Font=new Font( ƎCourier New Ǝ,12,FontStyle.Bold)). Для добавления переключателей в группу используем оператор цикла. Индексная переменная k пробегает значения индексов элементов из массива radio. За каждую итерацию цикла командой radio[k]=new RadioButton() создается объект переключателя. Командой radio[k].Text=animals[k] определяется подпись для переключателя. Состояние переключателя (установлен или нет) определяется командой radio[k].Checked=(k==index). Здесь свойству Checked переключателя значением присваивается выражение k==index . Значение выражения k==index рано true, если переменная k имеет такое же значение, что и поле index, ив прочих случаях. Командой radio[k].SetBounds(10,20+k*(h+4),100,h) определяются положение и размеры переключателя (предварительно в переменную записано значение высоты переключателя. Обработчик для события, связанного с изменением состояния переключателя, определяется командой radio[k].CheckedChanged+=OnRadioClick. Таким образом, при изменении статуса переключателя будет вызываться метод OnRadioClick() , описанный в классе MyForm. Наконец, с помощью команды gb.Controls.Add(radio[k]) переключатель добавляется в группу переключателей. После завершения оператора цикла группа переключателей добавляется на панель (команда Объект кнопки btn создается на основе класса MyButton. При создании объекта название кнопки передается аргументом конструктору Глава класса MyButton. Обработчик для этой кнопки уже определена параметры и координаты кнопки определяем явно. Ширина кнопки равна трети от ширины панели (команда btn.Width=pnl.Width/3). Высота кнопки определяется командой btn.Height=30. По горизонтали кнопка смещена от левой границы контейнера (панель) на расстояние, равное трети ширины панели (команда btn.Left=pnl.Width/3). По вертикали кнопка смещена вниз на 5 пикселей от нижней границы метки (команда btn.Top=pict.Bottom+5). Шрифт для кнопки устанавливается такой же, как и для группы переключателей команда. Кнопка добавляется на панель (команда pnl. Controls.Add(btn) ), после чего панель добавляется в окно (команда Закрытый метод OnRadioClick() предназначен для обработки событий, связанных с изменением состояния переключателей. В теле метода выполняется оператор цикла, в котором перебираются все переключатели из массива radio. Для каждого переключателя выполняется проверка состояния (значение свойства Checked объекта переключателя — true для установленного переключателя и false для неустановленного переключателя. Если переключатель установлен, то командой pict. Image=Image.FromFile(path+files[k]) для метки задается новое изображение (в соответствии с установленным переключателем, а командой return завершается работа метода. В главном методе программы традиционно создается и отображается окно с изображением, переключателями и кнопкой (см. рис. Опция и поле ввода Тот, кто нам мешает, тот нами поможет. из к/ф Кавказская пленница» Следующий проект также связан с отображением картинок. Нона этот раз мы используем такие компоненты, как текстовое поле и опция. Сначала появляется диалоговое окно с полем ввода. Окно показано на рис. 8.22. Приложения с графическим интерфейсом 427 Рис. 8.22. Окно с полем для ввода названия животного В поле нужно ввести название животного. Под полем ввода есть опция. Если она установлена (у опции есть флажок, тоне имеет значения, какими буквами (строчными или заглавным) вводится название животного. Если опция не установлена, то название животного нужно вводить с заглавной буквы. На рис. 8.23 показано окно, в поле которого введено слово Лиса. Рис. 8.23. В текстовое поле введено название животного Если название животного введено корректно, то после щелчка по кнопке ОК появится еще одно окно, в котором содержится изображение животного, а название животного станет заголовком окна. На рис. 8.24 показано окно с изображением лисы, которое появляется, если в поле ввода ввести слово Лиса Глава Рис. 8.24. Окно с изображением лисы Окно с изображением волка показано на рис. Рис. 8.25. Окно с изображением волка На рис. 8.26 показано, какое окно появится, если пользователь введет в текстовое поле слово Енот. Рис. 8.26. Окно с изображением енота Приложения с графическим интерфейсом 429 Окно с изображением медведя показано на рис. Рис. 8.27. Окно с изображением медведя Если пользователь вместо кнопки ОК нажимает кнопку Отмена в окне с полем ввода (см. рис. 8.23), то работа программы завершается. Также возможен вариант, когда пользователь неправильно вводит название животного в поле ввода. В этом случае появляется окно с изображением жирафа. Окно показано на рис. Рис. 8.28. Окно с изображением жирафа НАЗ А МЕТКУ В данном случае файл с изображением жирафа помещается в тот же каталог, что и файлы других изображений. Размеры всех файлов одинаковы и составляют 150 пикселей в ширину и 100 пикселей в высоту. Файл с изображением жирафа сохраняется в формате png , который позволяет создавать в изображении прозрачный фон. Поэтому при отображении жирафа в окне создается впечатление, что картинка нарисована непосредственно в области окна Глава Теперь проанализируем программный код примера. Сразу отметим несколько принципиальных моментов. Во-первых, как отмечалось выше, мы используем два новых компонента текстовое поле и опцию. Объект для текстового поля создается на основе класса TextBox. Объект для опции создается на основе класса CheckBox. Во-вторых, мы используем внутренний класс НАЗ А МЕТКУ Внутренним называется класс, который описан внутри другого класса. Если внутренний класс закрытый, то объекты этого внутреннего класса могут создаваться в программном коде внешнего класса того, в котором описан внутренний класс. Если внутренний класс открытый, то его можно использовать и вне кода внешнего класса. В таком случае обращение к внутреннему классу выполняется так указывается имя внешнего класса, точка и имя внутреннего класса. Схема следующая внешний класс MyInputBox используется для создания объекта окна с полем ввода. Закрытый внутренний класс MyForm используется для создания объекта окна с изображением. Программный код примера представлен в листинге Листинг 8.7. Использование опций и полей System; using System.Drawing; using System.Windows.Forms; // Ʉɥɚɫɫ ɞɥɹ ɨɤɧɚ ɫ ɩɨɥɟɦ ɜɜɨɞɚ: class MyInputBox:Form{ // ȼɧɭɬɪɟɧɧɢɣ ɡɚɤɪɵɬɵɣ ɤɥɚɫɫ ɞɥɹ ɨɤɧɚ ɫ ɢɡɨɛɪɚɠɟɧɢɟɦ: private class MyForm:Form{ // Ɂɚɤɪɵɬɨɟ ɩɨɥɟ ɜɧɭɬɪɟɧɧɟɝɨ ɤɥɚɫɫɚ (ɦɚɫɫɢɜ ɫ // ɧɚɡɜɚɧɢɹɦɢ ɠɢɜɨɬɧɵɯ): private string[] animals={ ƎȼɨɥɤƎ,ƎɅɢɫɚƎ,ƎɆɟɞɜɟɞɶƎ,ƎȿɧɨɬƎ}; // Ɂɚɤɪɵɬɨɟ ɩɨɥɟ ɜɧɭɬɪɟɧɧɟɝɨ ɤɥɚɫɫɚ (ɦɚɫɫɢɜ ɫ // ɧɚɡɜɚɧɢɹɦɢ ɮɚɣɥɨɜ ɫ ɢɡɨɛɪɚɠɟɧɢɹɦɢ ɠɢɜɨɬɧɵɯ): private string[] files={ Ǝwolf.jpgƎ,Ǝfox.jpgƎ,Ǝbear.jpgƎ,Ǝraccoon.jpgƎ}; Приложения с графическим интерфейсом // Ɂɚɤɪɵɬɨɟ ɩɨɥɟ ɜɧɭɬɪɟɧɧɟɝɨ ɤɥɚɫɫɚ (ɩɭɬɶ ɤ ɤɚɬɚɥɨɝɭ // ɫ ɮɚɣɥɚɦɢ ɢɡɨɛɪɚɠɟɧɢɣ): private string path= ƎD:/Books/pictures/csharp/Ǝ; // Ʉɨɧɫɬɪɭɤɬɨɪ ɜɧɭɬɪɟɧɧɟɝɨ ɤɥɚɫɫɚ: public MyForm(string t,bool state):base(){ // ɇɚɡɜɚɧɢɟ ɠɢɜɨɬɧɨɝɨ ɢ ɧɚɡɜɚɧɢɟ ɮɚɣɥɚ, // ɢɫɩɨɥɶɡɭɟɦɵɟ ɩɨ ɭɦɨɥɱɚɧɢɸ: string txt= ƎɀɢɪɚɮƎ,file=Ǝgiraffe.pngƎ; // ɉɟɪɟɛɨɪ ɷɥɟɦɟɧɬɨɜ ɦɚɫɫɢɜɚ ɫ ɧɚɡɜɚɧɢɹɦɢ // ɠɢɜɨɬɧɵɯ: for(int k=0;k ɋɪɚɜɧɟɧɢɟ ɬɟɤɫɬɨɜɵɯ ɡɧɚɱɟɧɢɣ if((t==animals[k])||((t.ToLower()==animals[k].ToLower())&state)){ // ɇɚɡɜɚɧɢɟ ɠɢɜɨɬɧɨɝɨ: txt=animals[k]; // Ɏɚɣɥ ɫ ɢɡɨɛɪɚɠɟɧɢɟɦ ɠɢɜɨɬɧɨɝɨ: file=files[k]; // Ɂɚɜɟɪɲɟɧɢɟ ɜɵɩɨɥɧɟɧɢɹ ɨɩɟɪɚɬɨɪɚ ɰɢɤɥɚ: break; } } // Ɂɚɝɨɥɨɜɨɤ ɞɥɹ ɨɤɧɚ: this.Text=txt; // ɒɪɢɮɬ ɞɥɹ ɨɤɧɚ: this.Font=new Font( ƎCourier NewƎ,12,FontStyle.Bold); // Ɉɤɧɨ ɩɨɫɬɨɹɧɧɵɯ ɪɚɡɦɟɪɨɜ: this.FormBorderStyle=FormBorderStyle.Fixed3D; // Ɉɤɧɨ ɧɟɥɶɡɹ ɪɚɡɜɟɪɧɭɬɶ ɧɚ ɜɟɫɶ ɷɤɪɚɧ: this.MaximizeBox=false; // Ɉɛɴɟɤɬ ɢɡɨɛɪɚɠɟɧɢɹ: Image img=Image.FromFile(path+file); // ȼɵɫɨɬɚ ɢɡɨɛɪɚɠɟɧɢɹ: Глава 8 432 int h=img.Height; // ɒɢɪɢɧɚ ɢɡɨɛɪɚɠɟɧɢɹ: int w=img.Width; // Ɉɛɴɟɤɬ ɦɟɬɤɢ: Label lbl=new Label(); // ɂɡɨɛɪɚɠɟɧɢɟ ɞɥɹ ɦɟɬɤɢ: lbl.Image=img; // ɉɨɥɨɠɟɧɢɟ ɢ ɪɚɡɦɟɪɵ ɦɟɬɤɢ: lbl.SetBounds(10,10,w+4,h+4); // Ɋɚɦɤɚ ɞɥɹ ɦɟɬɤɢ: lbl.BorderStyle=BorderStyle.FixedSingle; // Ɉɛɴɟɤɬ ɤɧɨɩɤɢ: Button btn=new Button(); // ɇɚɡɜɚɧɢɟ ɤɧɨɩɤɢ: btn.Text= ƎOKƎ; // ɉɨɥɨɠɟɧɢɟ ɢ ɪɚɡɦɟɪɵ ɤɧɨɩɤɢ: btn.SetBounds(w/4+10,lbl.Bottom+5,w/2,30); // Ɉɛɪɚɛɨɬɱɢɤ ɞɥɹ ɫɨɛɵɬɢɹ, ɫɜɹɡɚɧɧɨɝɨ ɫɨ ɳɟɥɱɤɨɦ // ɩɨ ɤɧɨɩɤɟ: btn.Click+=(x,y)=>{ Application.Exit(); }; // Ɋɚɡɦɟɪɵ ɨɤɧɚ: this.Size=new Size(w+40,btn.Bottom+50); // ɇɚɱɚɥɶɧɨɟ ɩɨɥɨɠɟɧɢɟ ɨɤɧɚ: this.StartPosition=FormStartPosition.CenterScreen; // Ⱦɨɛɚɜɥɟɧɢɟ ɦɟɬɤɢ ɜ ɨɤɧɨ: this.Controls.Add(lbl); // Ⱦɨɛɚɜɥɟɧɢɟ ɤɧɨɩɤɢ ɜ ɨɤɧɨ: this.Controls.Add(btn); } } Приложения с графическим интерфейсом // Ɂɚɤɪɵɬɨɟ ɩɨɥɟ ɜɧɟɲɧɟɝɨ ɤɥɚɫɫɚ (ɫɫɵɥɤɚ ɧɚ ɨɩɰɢɸ): private CheckBox option; // Ɂɚɤɪɵɬɨɟ ɩɨɥɟ ɜɧɟɲɧɟɝɨ ɤɥɚɫɫɚ (ɫɫɵɥɤɚ ɧɚ ɤɧɨɩɤɭ): private Button ok; // Ɂɚɤɪɵɬɨɟ ɩɨɥɟ ɜɧɟɲɧɟɝɨ ɤɥɚɫɫɚ (ɫɫɵɥɤɚ ɧɚ ɤɧɨɩɤɭ): private Button cancel; // Ɂɚɤɪɵɬɨɟ ɩɨɥɟ ɜɧɟɲɧɟɝɨ ɤɥɚɫɫɚ (ɫɫɵɥɤɚ ɧɚ ɩɨɥɟ): private TextBox tb; // Ʉɨɧɫɬɪɭɤɬɨɪ ɜɧɟɲɧɟɝɨ ɤɥɚɫɫɚ: public MyInputBox():base(){ // Ɋɚɡɦɟɪɵ ɨɤɧɚ: this.Size=new Size(250,190); // ɉɨɥɨɠɟɧɢɟ ɨɤɧɚ: this.StartPosition=FormStartPosition.CenterScreen; // Ɂɚɝɨɥɨɜɨɤ ɨɤɧɚ: this.Text= Ǝɇɚɡɜɚɧɢɟ ɠɢɜɨɬɧɨɝɨƎ; // Ɉɤɧɨ ɩɨɫɬɨɹɧɧɵɯ ɪɚɡɦɟɪɨɜ: this.FormBorderStyle=FormBorderStyle.FixedDialog; // Ɉɤɧɨ ɧɟɥɶɡɹ ɪɚɡɜɟɪɧɭɬɶ ɧɚ ɜɟɫɶ ɷɤɪɚɧ: this.MaximizeBox=false; // ɒɪɢɮɬ ɞɥɹ ɨɤɧɚ: this.Font=new Font( ƎTimes New RomanƎ,13,FontStyle.Regular); // Ɉɛɴɟɤɬ ɦɟɬɤɢ: Label lbl=new Label(); // Ɍɟɤɫɬ ɞɥɹ ɦɟɬɤɢ: lbl.Text= ƎɄɚɤɨɟ ɠɢɜɨɬɧɨɟ ɩɨɤɚɡɚɬɶ?Ǝ; // ȼɵɫɨɬɚ ɢ ɲɢɪɢɧɚ ɦɟɬɤɢ: lbl.Height=30; lbl.Width=this.Width-30; // Ʉɨɨɪɞɢɧɚɬɵ ɦɟɬɤɢ: lbl.Left=10; lbl.Top=10; Глава 8 |