- •Лабораторна робота №7. Тема: Робота з мишкою і клавіатурою
- •Теоретичні відомості
- •Фокус елементів управління
- •Події отримання і втрати фокусу
- •Надаємо фокус у коді.
- •Якщо зламалася мишка
- •Подробиці подій миші. Клас MouseEventArgs
- •Приклади використання деяких подій миші
- •Події KeyDown і KeyUp. Клас KeyEventArgs
- •Приклади використання деяких подій клавіатури
- •Варіанти індивідуальних завдань
Приклади використання деяких подій миші
Приклад 1. При побудові графічних зображень досить часто потрібно визначити координати точок на формі, для цього можна використати подію MouseMove для форми, що буде визначати координати курсору на формі і відображати їх на мітці (мітка рухається разом із курсором):
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
Label1.Left = e.X
Label1.Top = e.Y
Label1.Text = Str(e.X) & Str(e.Y)
End Sub
Приклад 2. Наступна програма виводить на формі лінію, яка точно повторює траєкторію руху покажчика миші. Створюючи код, приведений нижче, ми оголошуємо змінні видимі в модулі, потім, використовуючи подію MouseDown визначаємо початкові координати покажчика миші, і, нарешті за допомогою події MouseMove задаємо координати наступних точок лінії і малюємо її методом DrawLine:
Dim i As Boolean
Dim xl As Integer
Dim yl As Integer
Dim x2 As Integer
Dim y2 As Integer
Private Sub Forml_MouseDown(ByVal sender As Object, ByVal e _
As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
If e.Button = MouseButtons.Left Then
xl = e.X
yl = e.Y
i = True
End If
End Sub
Private Sub Forml_MouseMove(ByVal sender As Object, ByVal e _
As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
Dim graf As Graphics = MyClass.CreateGraphics
If i = True Then
x2 = e.X
y2 = e.Y
graf.DrawLine(New Pen(Color.Brown, 3), xl, yl, x2, y2)
xl = x2
yl = y2
End If
End Sub
Private Sub Forml_MouseUp(ByVal sender As Object, ByVal e _
As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
i = False
End Sub
Недолік цього способу полягає в тому, що лінія у точності повторює траєкторію руху миші. А намалювати мишею щось вагоме не просто. У цьому легко переконатися, поглянувши на малюнок.
Приклад 3. У наступному прикладі при проходженні вказівника миші над кнопкою Button відбувається зміна кольору кнопки і тексту в елементі TextBox.
Private Sub Buttonl_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
Button1.BackColor = Color.Red
TextBox1.Text = "вказівник миші"
End Sub
Private Sub Buttonl_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseLeave
Button1.BackColor = Color.LightBlue
TextBox1.Text = ""
End Sub
Робота з клавіатурою
Познайомимося з подіями, пов'язаними з клавіатурою. Їх три: KeyDown (клавіша натиснута), KeyUp (клавіша відпущена) і KeyPress (ввели з клавіатури символ).
Подія KeyPress. Клас KeyPressEventArgs. Структура Char
Створіть проект з однієї форми, без єдиного елемента управління. Зайдіть у вікно коду і виберіть для форми подію KeyPress. В тілі процедури запишіть наступний код:
Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles MyBase.KeyPress
Debug.Write(e.KeyChar)
End Sub
Запустіть проект, натискайте клавіші клавіатури і спостерігайте за результатами у вікні Output. Кожного разу, як ви натискаєте на алфавітно-цифрову клавішу (тобто набираєте на клавіатурі букву, цифру, знак пунктуації або інший символ), набраний символ з'являється у вікні Output. Спробуйте ввести великі літери, російські літери. Усе виходить:
qwertyQWERTY12345,.!фывапроФЫВАПРО()"№;%:?*
Більш того, натиснення клавіш пробілу, введення і табуляції викликає звичний ефект. Враження таке, що вікно Output перетворилося у вікно текстового редактора.
Натискання функціональних (F1 - F12) і багатьох керуючих клавіш не викликає події KeyPress. (Керуючі клавіші - це ті, що зосереджені в основному в лівому кінці клавіатури і в правій її частині лівіше додаткової цифрової клавіатури.)
З програми видно, що символи, що виводяться у вікно Output, є значеннями властивості KeyChar об'єкта e, що належить класу KeyPressEventArgs. Між тим, значення властивості KeyChar є структура Char, що володіє рядом корисних методів, дію деяких з яких видно з наступної програми:
Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
Dim Символ As Char = e.KeyChar
Debug.WriteLine("Набрано символ" & Символ)
Debug.WriteLine("Це цифра?" & Char.IsDigit(Символ))
Debug.WriteLine("Це літера?" & Char.IsLetter(Символ))
Debug.WriteLine("Правда, що це буква чи цифра?" & Char.IsLetterOrDigit(Символ))
Debug.WriteLine("Це маленька літера?" & Char.IsLower(Символ))
Debug.WriteLine("Це заголовна літера?" & Char.IsUpper(Символ))
Debug.WriteLine("Це знак пунктуації?" & Char.IsPunctuation(Символ))
Debug.WriteLine("Це пробіл?" & Char.IsSeparator(Символ))
Debug.WriteLine("Перетворити в малу" & Char.ToLower(Символ))
Debug.WriteLine("Перетворити в заголовну" & Char.ToUpper(Символ))
End Sub
Ось як відреагує ця програма на введення великої російської літери «Ж»:
Набрано символ Ж
Це цифра? False
Це літера? True
Правда, що це буква чи цифра? True
Це маленька літера? False
Це заголовна літера? True
Це знак пунктуації? False
Це пробіл? False
Перетворити в малу ж
Перетворити в заголовну Ж
Аналізувати які вводяться з клавіатури символи для управління комп'ютером можна, наприклад, такими операторами:
If Символ = ":" Then Debug.WriteLine("Набрано двокрапку")
If Char.IsDigit(Символ) Then Debug.WriteLine("Набрано цифру")