Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 151

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 145 146 147 148 149 150 < 151 > 152 153 154 155 156 157 .. 320 >> Следующая

public class hdif^orr : Form {
public static int MavCstringU args) {
App Ii cat і on. Run (new MainFormO): return 0:
}
public MainFormO {
Top - 100; Left - 75: Height = 100; Width = 500;
MessageBox.Show(Bounds.ToStringO. 'Current rect");
// Перехватываем событие Mouseup
this.MouseUp +» new MauseEventHandlsr(OnMouseUp);
)
И Метод, вызываемый при возникновении собьтия MouseUp public void OnMouseUpt object sender. MouseEventArgs e) {
this.Text = "Clicked at: + e.X + e.Y
)
Г
Теперь подумаем над тем, что мы сделали. Kai\ мы помним, делегаты в приложениях Windows Forms принимают в качестве второго параметра объект класса EventArgs (или производного от него класса). Лри обработке событий мыши второй параметр — это объект производного класса MouseEventArgs. Этот тип. определенный в пространстве имен System.Wi priows. Ferns. содержит в себе очень полезные
События класса Control 365
свойства, которые мы можем использовать для получения информации о текущем состоянии мыши и положении ее указателя (табл. 8.8).
Таблица 8.8. Сеойстаа, определенные в классе HouseEventArgs
Свойство Назначение
Button Позволяет получить информацию о том, какая кнопка мыши нажата (в виде
значений перечисления MouseButtons)
Clicks Позволяет получить информацию о том, сколько раз нажата и отпущена кнопка
мыши
Delta Позволяет получить информацию (в виде положительного или отрицательного
числового значения) о повороте колесика мыши
X Позволяет получить координату X для указателя мыши во время щелчка
_То же самое для координаты Y_
Наша реализация метода OnMouseUp() просто выводит в заголовок окна информацию о координатах указателя мыши во время щелчка. Выглядит это примерно так, как показано на рис. 8.1 б.
Л CNcked at: (313,«) URB
Рис. 8.16. Захват события MoeseUp
Еще интереснее будет, если мы организуем захват события MouseMove и будем отображать координаты указателя непосредственно во время движения мыши над клиентской частью формы:
public class rfcinform : Form {
public пйіЛГа-глО
(
Jj Отслекиваен движения ныши (вместе с событием MouseUp this. MouseUp +- new MouseEventHandler(OnMouseUp): this.MouseHosre += new MouseEventHandlerCOnMouseMove);
)
public vcid orf-toijseypCotcect. sender. MouseEventArgs e)
і
HessageBox.ShowrStop clicking me!");
1
public void OnMouseMovetooject sender, MouseEventArgs e) I
this.Text = "Current Pos: (" + e.X + ". " + e.Y + ")':
)
Г
366 Глава 8 • Окна становятся лучше: введение в Windows.Forms
Какая кнопка мыши нажата?
Особенностью событий MouseUp и MouseDown является то, что они срабатывают вне зависимости от того, какая' кнопка нажата (и в этом легко убедиться на примере нашего приложения). Чтобы реагировать только на нажатие определенной кнопки (вариантов три -левая, правая и средняя), необходимо организовать проверку .значения свойства Button объекта класса MouseE ventArgs. Диапазон возможных значений Button ограничен перечислением MouseButtons:
public void OnMouseUp(object sender, MouseEventArgs e)
{
II Какая именно кнопка нажата? ifCe.Button = = MouseButtons.teft)
MessageBox.ShowCteft click!"):
else ifCe.Button = = MouseButtons.Right) MessageBox.ShowCRight click!");
else И Остается только средняя кнопка - ftouseButtons.Middle MessageBox.ShowC"Middle click!"):
}
Теперь при нажатии, к примеру, на среднюю кнопку мыши мы увидим окно сообщения, аналогичное представленному на ;шс. 8.17.
Рис. 8.17. Какая кнопка мыши нажата?
Реагируем на события мыши: часть вторая
Второй способ перехвата событий в типах, производных от Control. — заместить методы базового класса (в нашем случае OnMouseUpO и OnMouseMoveO). Класс Control определяет множество виртуальных методов, определенных как protected, которые вызываются автоматически, когда происходит соответствующее событие. Если мы обновим нашу форму таким образом, чтобы для обработки событий использовался именно этот подход, вручную указывать обработчики событий нам уже не
потребуется:
public class HairForm : Form {
public MainForm() {
Yl Сейчас обработчики событий на и [ms нужны
// this,Mouseup +- new MouseEventH.indler(OnMouseUp):
I/ this.MouseUp += new MouseEventH.indler(OnMouseMove):
}
protected override void On.MousetpiV/objeci. sender. Moj$&ven;Args e)
Реагируем на события клавиатуры 367
1
// Какая кнопка мыши нажата?
if (е.Button - - MouseButtons.Left)
WessageBox.ShowC'Left click!"): іf(e,Button - = MouseButtons.Right)
Mess ageBox.Show("Ri ght clі ck!"); іf(e.Button - = MouseButtons,Middle)
MessageBox. Show("Middie click!"):
protected override void . : ¦ ¦. : sender, МслеЬйпіАгуз e)
і
this.Text - "Current Pos: (" + e.X + ", " + e.Y + ")":
!
Г
Обратите внимание, что в этом случае каждый из методов принимает тз.тька один параметр, анедва, как было раньше (когданеобходимо было соответствовать сигнатуре делегата MouseEventHandl er). Если мы запустим новый вариант этой про-краммы, то никаких изменений мы не заметим (значит, все в порядке). При создании реальных приложений второй подход с замещением методов OnXXXXС) обычно применяется только тогда, когда мы хотим выполнить перед реакцией на какое-либо событие дополнительные действия. Чаще всего используется первый подход — с применением делегатов.
Предыдущая << 1 .. 145 146 147 148 149 150 < 151 > 152 153 154 155 156 157 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100