Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Собственные производные классы элементов управления
Переопределение методов OnXXX Усовершенствуем поведение приложения «Крестики-нолики», так, чтобы приложение определяло выигрыш одного из игроков. Для этого придется анализировать содержимое кнопки. Когда содержимое кнопки определяется ее свойством Text, это сделать просто. Например, тот факт, что на главной диагонали игрового поля располагаются «крестики», записывается следующим образом: btnCells[0,0].Text==”X”&&btnCells[1,1].Text==”X”&&btnCells[2,2].Text==”X” Однако, если на кнопке будет размещаться изображение «крестиков» и «ноликов» (объект класса Image), то простое сравнение уже не допустимо. Для решения задачи можно использовать свойство Tag. Это свойство наследуется всеми элементами управления от класса Control и может содержать любое значение, производного от класса Object типа. В нашем случае в свойство Tag можно помещать логическую величину: true – если кнопка содержит «крестик» и false – «нолик». Тогда проверка «крестиков» на главной диагонали будет выглядеть так: (bool)(btnCells[0,0].Tag)&&(bool)(btnCells[1,1].Tag)&&(bool)(btnCells[2,2].Tag) Таким образом, каждый элемент управления может содержать одну дополнительную порцию данных, соответствующую способу использования этого элемента. Но что делать, если представления этой дополнительной информации одного элемента данных недостаточно. В этом случае логично создать производный класс, в котором определить все дополнительные переменные. В нашем случае это может быть класс XOCell: public class XOCell: Button { private XOState state; public XOCell():base() {state=XOState.Empty;} public XOState State { get { return state; } set { state = value; } } } Здесь используется перечислимый тип XOState, поскольку для описания состояния клетки нужны три значения: public enum XOState {X,O,Empty}; Замените всюду в тексте программы использование класса Button на класс XOCell. Кроме того, нужно определить метод, проверяющий победу одного из игроков: private void Win(XOState s) { string t=(s==XOState.X?"крестики":"нолики"); int i; //проверяем горизонтали for(i=0;i<3;i++) if ((btnCells[i, 0].State == s) && (btnCells[i, 1].State == s) && (btnCells[i, 2].State == s)) { MessageBox.Show("Победили " + t + "!"); clearAllCells(); return; } //проверяем вертикали ... //главная диагональ ... //побочная диагональ ... }
Интерфейсы и коллекции Делегаты
Другие элементы управления Label – поле вывода текста (метка)
TextBox – поле ввода и редактирования текста Button – командная кнопка CheckBox – переключатель не исключающего выбора RadioButton – переключатель исключающего выбора ListBox – список выбора ComboBox – комбинированный список выбора MainMenu – главное меню окна ContextMenu – контекстное меню
MessageBox Show Label Refresh Paint PaintEventArgs Button xEnabled SetBounds TextBox Text Handled Focus TextChanged KeyPress KeyPress KeyPressedEventArgs KeyChar ComboBox DropDownStyle SelectedIndex SelectedIndexChanged CheckBox CheckedChanged Checked Form Load Close
FolderBrowserDialog PictureBox DirectoryInfo FileInfo
Timer NumericUpDown
Класс Control Все классы элементов управления и класс Form являются производными от класса Control. Поэтому они имеют доступ к обширной унаследованной функциональности этого класса. Класс System.Windows.Forms.Control задает общее поведение, ожидаемое от любого GUI-типа. Базовые члены Control позволяют указать размер и позицию элемента управления, выполнить захват событий клавиатуры и мыши, получить и установить фокус ввода, задать и изменить видимость членов и т.д. В табл. 19.4 определяются некоторые (но, конечно же, не все) свойства, сгруппированные по функциональности. Таблица 19.4. Базовые свойства типа Control (большинство свойств обеспечивают доступ как по чтению, так и по записи)
Кроме того, класс Control определяет ряд событий, позволяющих реагировать на изменение состояния мыши, клавиатуры, действия выделения и перетаскивания объектов (а также на многие другие действия). В табл. 19.5 предлагается список некоторых (но далеко не всех) событий, сгруппированных по функциональности.
Таблица 19.5. События типа Control
Наконец, базовый класс Control определяет целый ряд методов, позволяющих взаимодействовать с любым типом, производным от Control. При ближайшем рассмотрении методов Control вы обнаружите, что многие из них имеют префикс On, за которым следует имя соответствующего события (OnMouseMove, OnKeyUp, OnPaint и т.д.). Каждый из этих снабженных префиксом виртуальных методов представляет собой обработчик соответствующего события, заданный по умолчанию. Переопределив такой виртуальный член, вы получаете возможность выполнить необходимую предварительную (или заключительную) обработку данных, перед вызовом (или после вызова) родительской реализации обработчика события. public class MainWindow: Form { protected override void OnMouseDown(MouseEventArgs e) { // Добавленный программный код для события MouseDown. // Вызов родительской реализации.
base.OnMouseDown(e); } } Это может оказаться полезным, например, при создании пользовательских элементов управления, которые получаются из стандартных (см. главу 21), но чаще всего вы будете использовать обработку событий в рамках стандартного синтаксиса событий С# (именно это предлагается средствами проектирования Visual Studio 2005 по умолчанию). В этом случае среда разработки вызовет пользовательский обработчик события после завершения работы родительской реализации. public class MainWindow: Form { public MainWindow () { MouseDown+=new MouseEventHandler(MainWindow_MouseDown); } void MainWindow_MouseDown(object sender, MouseEventArgs e) { // Добавленный программный код для события MouseDown. } } Кроме методов вида OnХХХ(), есть несколько других методов, о которые вам следует знать.
Несомненно, класс Control определяет и другие свойства, методы и события в дополнение к тем, которые вы только что рассмотрели. Но и сейчас вы должны иметь достаточно хорошее представление об общих функциональных возможностях этого базового класса. Давайте рассмотрим примеры, позволяющие увидеть указанный класс в действии.
|
|||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-12-15; просмотров: 39; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.137.108 (0.014 с.) |