Главная страница
Навигация по странице:

  • Работа с диалоговым окном

  • Рис. 9.1. Вначале выполнения программы появляется диалоговое окно с кнопками Да и Нет

  • Васильев А.Н. Основы программирования на C#. Васильев А. Н. Программирование


    Скачать 5.54 Mb.
    НазваниеВасильев А. Н. Программирование
    АнкорВасильев А.Н. Основы программирования на C
    Дата20.09.2022
    Размер5.54 Mb.
    Формат файлаpdf
    Имя файлаVasilev_Programmirovanie-na-C-dlya-nachinayushchih-Osobennosti-y.pdf
    ТипДокументы
    #686596
    страница36 из 40
    1   ...   32   33   34   35   36   37   38   39   40

    464
    pnl.BackColor=Color.Yellow;
    //
    ȼɢɞ ɤɭɪɫɨɪɚ ɧɚɞ ɩɚɧɟɥɶɸ:
    pnl.Cursor=Cursors.Hand;
    //
    Ɉɛɴɟɤɬ ɞɥɹ ɪɢɫɨɜɚɧɢɹ:
    p=new Pen(Color.Blue,3);
    //
    Ɉɛɴɟɤɬ ɝɪɚɮɢɱɟɫɤɨɝɨ ɤɨɧɬɟɤɫɬɚ ɞɥɹ ɩɚɧɟɥɢ:
    g=pnl.CreateGraphics();
    //
    Ɉɛɪɚɛɨɬɱɢɤ ɫɨɛɵɬɢɹ, ɫɜɹɡɚɧɧɨɝɨ ɫ ɞɜɢɠɟɧɢɟɦ ɤɭɪɫɨɪɚ
    //
    ɧɚɞ ɨɛɥɚɫɬɶɸ ɩɚɧɟɥɢ:
    pnl.MouseMove+=(obj,ea)=>{
    //
    ɉɟɪɟɪɢɫɨɜɤɚ ɩɚɧɟɥɢ:
    pnl.Refresh();
    //
    Ɍɟɤɫɬ ɞɥɹ ɦɟɬɤɢ:
    lbl.Text=
    ƎȽɨɪɢɡɨɧɬɚɥɶ: Ǝ+ea.X;
    lbl.Text+=
    Ǝ Ǝ;
    lbl.Text+=
    Ǝȼɟɪɬɢɤɚɥɶ: Ǝ+ea.Y;
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɥɢɧɢɣ:
    g.DrawLine(p,new Point(0,ea.Y),new Point(pnl.ClientSize.Width,ea.Y));
    g.DrawLine(p,new Point(ea.X,0),new Point(ea.X,pnl.ClientSize.Height));
    };
    //
    Ɉɛɪɚɛɨɬɱɢɤ ɫɨɛɵɬɢɹ, ɫɜɹɡɚɧɧɨɝɨ ɫ ɩɟɪɟɦɟɳɟɧɢɟɦ
    //
    ɤɭɪɫɨɪɚ ɡɚ ɩɪɟɞɟɥɵ ɩɚɧɟɥɢ:
    pnl.MouseLeave+=(obj,ae)=>{
    //
    Ɍɟɤɫɬ ɞɥɹ ɦɟɬɤɢ:
    lbl.Text=
    ƎƎ;
    //
    ɉɟɪɟɪɢɫɨɜɤɚ ɩɚɧɟɥɢ:
    pnl.Refresh();
    };
    //
    Ⱦɨɛɚɜɥɟɧɢɟ ɩɚɧɟɥɢ ɜ ɨɤɧɨ:
    this.Controls.Add(pnl);
    }
    //
    Ⱦɟɫɬɪɭɤɬɨɪ:
    Приложения с графическим интерфейсом

    MyForm(){
    //
    Ɉɫɜɨɛɨɠɞɟɧɢɟ ɪɟɫɭɪɫɨɜ, ɡɚɞɟɣɫɬɜɨɜɚɧɧɵɯ
    //
    ɞɥɹ ɪɢɫɨɜɚɧɢɹ:
    g.Dispose();
    p.Dispose();
    }
    }
    //
    Ƚɥɚɜɧɵɣ ɤɥɚɫɫ:
    class CursorDemo{
    [STAThread]
    //
    Ƚɥɚɜɧɵɣ ɦɟɬɨɞ:
    static void Main(){
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɨɤɧɚ:
    Application.Run(new MyForm());
    В классе окна MyForm есть поле p класса Pen и поле g класса Graphics оба класса из пространства имен System.Drawing). Это ссылки на объекты, которые нам понадобятся при рисовании линий.
    В конструкторе класса создается метка (объект lbl класса Label) и панель (объект pnl класса Panel). Для них и для объекта окна задаются их размеры и положение, а также ряд других параметров (назначение соответствующих команд должно быть понятно читателю. Для панели командой pnl.BackColor=Color.Yellow задается желтый цвет фона. Команда pnl.Cursor=Cursors.Hand используется для того, чтобы задать вид курсора мыши, когда он находится над областью панели. В данном случае свойству Cursor объекта панели pnl в качестве значения присваивается константа Hand из перечисления Cursors, и поэтому над областью панели курсор будет принимать вид ладони.
    Поскольку мы собираемся рисовать линии, тонам понадобится два объекта. Первый объект создается на основе класса Pen. Объект создается командой p=new Pen(Color.Blue,3). Он содержит информацию о цвете и толщине линий в процессе рисования. Командой g=pnl.CreateGraphics()
    в поле g записывается ссылка на объект
    Глава графического контекста для панели. Этот объект необходим для получения доступа к ресурсам, задействованным при рисовании в области графического компонента (в данном случае панели).
    Для панели определяются обработчики для события MouseMove, связанного с перемещением курсора над областью панели, а также для события, связанного с перемещением курсора за пределы панели. В частности, в список обработчиков события MouseMove объекта панели pnl добавляется ссылка на анонимный метод, определенный лямбда-выражением. В теле метода командой pnl.Refresh() выполняется перерисовка панели. Это необходимо, чтобы стереть линии, нарисованные для предыдущего положения курсора. Командами и lbl.
    Text+=
    Ǝȼɟɪɬɢɤɚɥɶ: Ǝ+ea.Y определяется текст метки (команд три, хотя можно было воспользоваться и одной. Здесь использованы выражения и ea.Y, которые возвращают координаты (горизонтальную и вертикальную, соответственно) курсора мыши в области панели ПОДРОБНОСТИ bДелегат
    EventHandler
    , которому должны соответствовать методы- обработчики для событий графических компонентов, подразумевает наличие у метода второго аргумента (объявлен как переменная класса
    EventArgs
    ), содержащего информацию о событии. В данном случае второй аргумент обозначен как ea
    . Его свойства
    X
    и
    Y
    позволяют определить координаты курсора мыши в момент события.
    Для отображения линий использованы команды g.DrawLine(p,new
    Point(0,ea.Y),new и g.DrawLine(p,new Point(ea.X,0),new Point(ea.X,pnl.
    ClientSize.Height))
    . В обоих случаях из объекта графического контекста вызывается метод DrawLine(), предназначенный для отображения линии. Первым аргументом методу передается объект p класса
    Pen
    , который определяет цвет и толщину линии. Два других аргумента метода — объекты класса Point, определяющие начальную и конечную точки, которые соединяет линия ПОДРОБНОСТИ bВыражения pnl.ClientSize.Width и pnl.ClientSize.Height определяют, соответственно, ширину и высоту клиентской (внутренней, доступной для использования) области панели
    Приложения с графическим интерфейсом
    467
    В случаях, когда курсор выходит за пределы области панели, обработка выполняется так командой lbl.Text=
    ƎƎ выполняется очистка содержимого метки, а командой pnl.Refresh() выполняется перерисовка панели НАЗ А МЕТКУ В классе
    MyForm определен еще и деструктор. В деструкторе выполняются команды g.Dispose()
    и p.Dispose()
    , которыми освобождаются ресурсы, задействованные для рисования. Правда в данном случае особого смысла в этих командах нет — при удалении объекта окна из памяти эти ресурсы итак освободятся. Главная причина, по которой описан деструктор, — подчеркнуть, что с ресурсами следует обращаться экономно.
    Для отображения окна в главном методе используется команда
    Application.Run(new MyForm())
    Резюме
    Были демоны — мы этого не отрицаем. Но они самоликвидировались.
    из к/ф Иван Васильевич меняет профессию Для реализации окна формы и прочих графических компонентов существуют специальные классы. Создание графического компонента отождествляется с созданием объекта соответствующего класса Объекты классов для графических компонентов имеют специальные методы и свойства, позволяющие задавать основные характеристики компонентов (размеры, положение, шрифт, цвет фона и многое другое Для обработки действий с графическими компонентами в классах компонентов предусмотрены события Характеристики методов, используемых для обработки событий, определяются делегатом
    EventHandler
    . Делегат подразумевает, что соответствующий метод не возвращает результат и у него два аргумента ссылка типа object на объект компонента, вызвавшего событие, и объектная ссылка типа
    EventArgs на объект, содержащий описание события
    Глава Задания для самостоятельной работы
    Сеня, по-быстрому объясни товарищу, почему Володька сбрил усы.
    из к/ф Бриллиантовая рука Напишите программу, отображающую окно, в котором внутренняя часть закрашена желтым цветом. При наведении курсора на область окна цвет фона меняется на зеленый. При щелчке мышью размеры окна должны увеличиваться на 10%.
    2. Напишите программу, в которой отображается окно с текстовой меткой и тремя кнопками. В текстовой метке содержится число (начальное значение — нулевое. Щелчок по одной из меток приводит к увеличению значения числа на единицу. Щелчок подругой кнопке приводит к уменьшению значения числа на единицу. Щелчок по третьей кнопке приводит к закрытию окна Напишите программу, в которой открывается окно с раскрывающимся списком. Список содержит названия цветов (красный, желтый, зеленый итак далее. Также окно содержит область, закрашенную тем цветом, который выбран в списке. При выборе в списке нового цвета область закрашивается этим цветом автоматически Напишите программу, в которой открывается окно с полем ввода. При вводе текста в окно этот текст автоматически дублируется в текстовой метке. В окне должны быть две опции, которые позволяют применять к тексту в метке жирный и курсивный стили Напишите программу, в которой отображается окно с двумя текстовыми полями. Предполагается, что в эти текстовые поля вводятся целочисленные значения. Кроме полей, в окне размещена метка, в которой содержится информация о том, какое из двух чисел больше/меньше или что числа равны друг другу. Информация в метке обновляется автоматически при изменении содержимого полей. Если хотя бы водном из полей указано не число, метка должна содержать информацию об этом Напишите программу, в которой отображается окно с изображением и двумя кнопками. Имеется несколько изображений, которые последовательно циклически отображаются в окне при щелчке по кнопкам. При щелчке по одной кнопке появляется следующее изображение
    Приложения с графическим интерфейсом в последовательности, а при щелчке подругой кнопке отображается предыдущее изображение в последовательности Напишите программу, в которой отображается окно со списком выбора. В списке выбора представлены названия шрифтов. Также окно содержит раскрывающийся список с названиями цветов (красный, зеленый, синий итак далее. Окно содержит область с текстом. При выборе цвета или названия шрифта этот цвет или шрифт применяются для отображения текста Напишите программу, в которой отображается окно с закрашенной областью. Для этой области есть контекстное меню с названиями цветов красный, желтый, зеленый итак далее. При выборе команды из контекстного меню область закрашивается соответствующим цветом Напишите программу, в которой отображается окно с главным меню и областью с текстом. Текст содержит информацию о названии, стиле и размере шрифта, которым отображается текст. Вменю есть пункты для выбора названия шрифта, стиля шрифта и размера шрифта. При выборе команды изменю соответствующая характеристика применяется для отображения текста, а также с учетом новых параметров шрифта меняется сам текст Напишите программу, в которой отображается окно, представляющее собой арифметический калькулятор
    Глава НЕМНОГО О РАЗНОМ
    Однако не следует думать, что здесь какое-то колдовство или чудо.
    из к/ф Собачье сердце»
    В этой главе рассматриваются вопросы, которые по различным причинам не вошли в предыдущие главы (первой и второй части книги, но которые, тем не менее, важны для понимания принципов программирования на C#. Большинство из представленных далее тем рассматриваются в факультативном режиме. Они не связаны между собой концептуально. Главная цель, которую мы преследуем здесь — дать читателю общее представление о томили ином механизме или подходе.
    Далее мы кратко рассмотрим такие вопросы работа с диалоговыми окнами использование пространств имен работа с датой и временем операции с файлами использование коллекций.
    Разумеется, приведенные далее теоретические сведения подкрепляются примерами.
    Работа с диалоговым окном
    Это не ты говоришь, это кричит твой вакуум!
    из к/ф Покровские ворота»
    В самом начале книги (впервой части) мы рассматривали способы вывода сообщений в диалоговое окно. Для этого использовался метод Show() класса MessageBox. На самом деле, окно, которое отображается в таком
    Немного о разном
    471
    случае, можно использовать не только для отображения сообщения, но и для получения ответа от пользователя. Для этого в окне с сообщением отображается несколько кнопок, и при щелчке пользователя по одной из них программа определяет, какую именно кнопку нажал пользо- ватель.
    Все дело в том, что метод Show() класса MessageBox возвращает результат. Просто раньше мы его не использовали. Результатом метода является одна из констант из перечисления DialogResult. Эта константа определяет кнопку, которую нажал пользователь в диалоговом окне например, Abort, Cancel, Ignore, No, OK, Retry или Yes — название константы соответствует названию кнопки, по которой щелкает пользователь. Как все это используется на практике, иллюстрирует программа в листинге Листинг 9.1. Работа с диалоговым окном System.Windows.Forms;
    //
    Ƚɥɚɜɧɵɣ ɤɥɚɫɫ:
    class DialogResultDemo{
    //
    Ƚɥɚɜɧɵɣ ɦɟɬɨɞ:
    static void Main(){
    //
    Ɍɟɤɫɬɨɜɵɟ ɩɟɪɟɦɟɧɧɵɟ:
    string msg,title;
    //
    ɉɟɪɟɦɟɧɧɚɹ ɞɥɹ ɨɩɪɟɞɟɥɟɧɢɹ ɩɢɤɬɨɝɪɚɦɦɵ:
    MessageBoxIcon icn;
    //
    ɉɟɪɟɦɟɧɧɚɹ ɞɥɹ ɨɩɪɟɞɟɥɟɧɢɹ ɪɟɡɭɥɶɬɚɬɚ:
    DialogResult res;
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɞɢɚɥɨɝɨɜɨɝɨ ɨɤɧɚ:
    res=MessageBox.Show(
    Ǝȼɚɦ ɧɪɚɜɢɬɫɹ C#?Ǝ,// ɋɨɨɛɳɟɧɢɟ
    ƎɊɢɬɨɪɢɱɟɫɤɢɣ ɜɨɩɪɨɫƎ, // Ɂɚɝɨɥɨɜɨɤ
    MessageBoxButtons.YesNo, //
    Ʉɧɨɩɤɢ
    MessageBoxIcon.Question //
    ɉɢɤɬɨɝɪɚɦɦɚ
    );
    //
    ɉɪɨɜɟɪɤɚ ɪɟɡɭɥɶɬɚɬɚ:
    if(res==DialogResult.Yes){ //
    ȿɫɥɢ ɨɬɜɟɬ ƎȾɚƎ
    Глава 9
    472
    //
    Ɍɟɤɫɬ ɫɨɨɛɳɟɧɢɹ:
    msg=
    ƎȾɨɛɪɨ ɩɨɠɚɥɨɜɚɬɶ ɜ ɤɨɦɚɧɞɭ!Ǝ;
    //
    Ɂɚɝɨɥɨɜɨɤ ɨɤɧɚ:
    title=
    Ǝɇɚɲ ɱɟɥɨɜɟɤƎ;
    //
    ɉɢɤɬɨɝɪɚɦɦɚ:
    icn=MessageBoxIcon.Information;
    }else{ //
    ȿɫɥɢ ɨɬɜɟɬ ƎɇɟɬƎ
    //
    Ɍɟɤɫɬ ɫɨɨɛɳɟɧɢɹ:
    msg=
    Ǝɍ ȼɚɫ ɧɟɬ ɫɟɪɞɰɚ!Ǝ;
    //
    Ɂɚɝɨɥɨɜɨɤ ɨɤɧɚ:
    title=
    Ǝɇɟ ɦɨɠɟɬ ɛɵɬɶƎ;
    //
    ɉɢɤɬɨɝɪɚɦɦɚ:
    icn=MessageBoxIcon.Error;
    }
    //
    Ɉɬɨɛɪɚɠɟɧɢɟ ɨɤɧɚ ɫ ɫɨɨɛɳɟɧɢɟɦ:
    MessageBox.Show(msg,title,MessageBoxButtons.OK,icn);
    В этой программе объявляется несколько переменных. Текстовые переменные и title нам нужны для того, чтобы запомнить текст сообщения и заголовок окна (который отображается последним в программе. В переменную icn (типа MessageBoxIcon) будет записано значение константы из перечисления MessageBoxIcon, определяющее тип пиктограммы для окна. Переменная res типа DialogResult используется для определения результата при нажатии кнопки в диалоговом окне. В переменную res записывается результат вызова статического метода
    Show()
    из класса MessageBox. Третьим аргументом методу передается константа YesNo из перечисления MessageBoxButtons. Эта константа означает, что у окна будет две кнопки (Yes и No, или Да и Нет НАЗ А МЕТКУ Четвертый аргумент
    MessageBoxIcon.Question метода означает, что в окне отображается пиктограмма с вопросительным знаком
    Немного о разном
    473
    На рис. 9.1 показано, как выглядит первое окно (с вопросом, которое отображается при запуске программы на выполнение.
    Рис. 9.1. Вначале выполнения программы появляется диалоговое окно с кнопками Да и Нет
    Если пользователь нажимает в окне кнопку Да, то значением переменной будет константа Yes из перечисления DialogResult. Если пользователь нажмет кнопку Нетто в переменную res будет скопировано значение константы No из перечисления DialogResult. Поэтому условие res==DialogResult.Yes в условном операторе истинно, если пользователь нажал в диалоговом окне кнопку Да. В этом случае выполняются команды msg=
    ƎȾɨɛɪɨ ɩɨɠɚɥɨɜɚɬɶ ɜ ɤɨɦɚɧɞɭ!Ǝ, title=
    Ǝɇɚɲ ɱɟɥɨɜɟɤƎ и icn=MessageBoxIcon.Information. В противном случае (если условие res==DialogResult.Yes ложно) выполняются команды msg=
    Ǝɍ ȼɚɫ ɧɟɬ ɫɟɪɞɰɚ!Ǝ, title=Ǝɇɟ ɦɨ-
    ɠɟɬ ɛɵɬɶƎ и icn=MessageBoxIcon.Error. Но при любом исходе переменные msg, title и icn получают значения и после условного оператора выполняется команда MessageBox.Show(msg,title,
    MessageBoxButtons.OK,icn)
    , которой отображается еще одно окно с сообщением. Параметры данного окна (текст сообщения, заголовок и пиктограмма) зависят оттого, какую кнопку пользователь нажал в предыдущем окне. На рис. 9.2 показано окно, которое отображается в случае, если пользователь в первом окне нажал кнопку Да.
    Рис. 9.2. Такое окно появляется, если пользователь нажал кнопку Да
    Глава Если пользователь нажмет в первом окне кнопку Нетто появится окно, показанное на рис. Рис. 9.3. Такое окно появляется, если пользователь нажмет кнопку Нет НАЗ А МЕТКУ Напомним, что тип пиктограммы в окне определяется константой и
    Warning
    ) из перечисления
    MessageBoxIcon
    . Количество и название кнопок в диалоговом окне определяется константой и
    YesNoCancel
    ) из перечисления Использование пространства имен

    Надежа-царь говорит, что я князь Милослав- ский. Устраивает это вас?
    из к/ф Иван Васильевич меняет профессию»
    Мы многократно использовали самые разные пространства имен. Теперь пришло время познакомиться с концепцией пространства имен поближе. Для начала отметим, что пространство имен используется для определения области уникальности имен названия классов, структур, делегатов, интерфейсов и перечислений, объявленных водном пространстве имен, должны быть уникальными. Другими словами, пространство имен — это некоторое множество классов и других утилит, ив пределах пространства имен названия этих утилит не могут совпадать. Например, два класса водном и том же пространстве не могут иметь одинаковые названия. Зато если классы относятся к разным пространствам имен, то названия классов могут и совпадать
    Немного о разном НАЗ А МЕТКУ Пространства имен могут содержать в себе другие пространства имен. Обращение к таким внутренним пространствам имен выполняется с использованием точечного синтаксиса указывается вся цепочка вложенных пространств имена названия пространств разделяются точкой. Например, если пространство имен
    Third находится в пространстве имена пространство
    Second находится в пространстве имен
    First
    , то для обращения к пространству имен
    Third используется выражение Мы уже знаем, что если в программе нужно использовать пространство имен, тов начале файла с программой размещается инструкция using
    , после которой указывается название пространства имен. В результате классы, структуры и прочие утилиты, описанные в пространстве имен, станут доступны в программе. Если пространство имен не подключено с помощью инструкции using, то для обращения к утилитам из этого пространства необходимо перед именем утилиты (например, класса, структуры, интерфейса) указывать название пространства имен. Например, если класс MyClass описан в пространстве имен
    MySpace
    , то обращение к такому классу выполняется инструкцией вида Мы можем не только подключать уже существующие пространства именно и описывать собственные. Делается это просто после ключевого слова namespace указывается название пространства имени в блоке из фигурных скобок описываются классы, структуры, интерфейсы, перечисления и делегаты, которые входят в это пространство имен НАЗ А МЕТКУ Описание пространства имен может быть разбито на несколько блоков. Другими словами, мы можем описывать пространство имен не все сразу, а по частям».
    Следовательно, шаблон описания пространства имен следующий
    ɢɦɹ{
    //
    ɋɨɞɟɪɠɢɦɨɟ ɩɪɨɫɬɪɚɧɫɬɜɚ ɢɦɟɧ
    }
    Глава В листинге 9.2 представлен небольшой пример, иллюстрирующий процесс описания пространства имен. В этой программе описаны два пространства имении каждое пространство имен содержит описание класса MyClass (то есть пространства имен содержат разные классы с совпадающими названиями).
    
    1   ...   32   33   34   35   36   37   38   39   40


    написать администратору сайта