第六章 响应鼠标和键盘事件

合集下载

VB中的键盘事件、鼠标事件、拖放技术

VB中的键盘事件、鼠标事件、拖放技术

VB中的键盘事件、鼠标事件、拖放技术键盘事件:参数是KeyAscii,每次按一下键盘上的一个键,相应的键的Ascii码值都要赋给参数KeyAscii,然后再执行相应的操作KeyPreview:接受键盘事件。

默认情况下,窗体的KeyPreview 属性为False,只有窗体获得焦点才能相应键盘事件;若窗体的KeyPreview属性为True,窗体会在空件之前首先截获键盘事件。

Shift And 7: 取Shift参数的低三位,因为7的二进制数是111,shift参数与111进行按位And运算,得到是按了三个功能键中的哪一个。

命令按钮控件的default属性用于设置默认命令按钮.,设置为true时,按[Enter键]相当于用鼠标单击了该按钮,Cancel属性为True,则Esc键触发按钮的Click事件快捷键的优先级高于键盘事件,鼠标事件:参数X和Y表示鼠标指针的位置Clc:清除图像。

划线函数Line格式:Line (x1, y1) -(x2, y2), [color], [B][F](x1, y1) 可选的。

Single (单精度浮点数),直线或矩形的起点坐标。

(x2, y2) 必选的。

Single (单精度浮点数),直线或矩形的终点坐标。

color 可选的。

Long (长整型数),画线时用的 RGB 颜色,可用RGB函数B 可选的。

如果包括,则利用对角坐标画出矩形。

F 可选的。

如果使用了 B 选项,则 F 选项规定矩形以矩形边框的颜色填充。

不能不用 B 而用F。

例:Line (0, 0)-(X, Y), vbGreen, BF拖放技术:DragMode属性:0—手动拖放,1—自动拖放DragDrop事件:Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)Source.Move X, YEnd Sub---Source表示拖放的控件,即DragMode属性为1的控件;xy 表示鼠标指针的位置坐标。

第6章 键盘和鼠标事件

第6章 键盘和鼠标事件
6.1
2019/2/12
2
Visual Basic程序设计教程
6.1 键盘事件
程序运行时,用户进行键盘操作,就会产
生键盘事件,由当前获得焦点的对象,来 响应键盘事件。 本节包括以下内容:
KeyPress事件 6.1.2 KeyDown事件和KeyUp事件
6.1.1
2019/2/12
3
22
Visual Basic程序设计教程

例6-2(语句-1)

程序代码如下:
Dim
BeginNow As Boolean Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) BeginNow = True Form1.DrawWidth = 3 Form1.CurrentX = X ‘设置窗体的当前坐标属性 Form1.CurrentY = Y End Sub

2019/2/12
21
Visual Basic程序设计教程
例6-2(界面)
【例6-2】使用MouseUp、MouseDown和
MouseMove事件,编写一个在窗体上用鼠 标绘图的简单程序。在窗体上按住鼠标按 键,移动鼠标时开始绘画,释放按钮时停 止绘画。程序运行界面如图6-2所示。
2019/2/12
17
Visual Basic程序设计教程
6.2.1 MouseMove事件




参数说明: ① Button参数是表示按下或松开鼠标哪个按键。 Button取值与对应按键描述如表6-3所示。 ② Shift:通过Shift参数表示在按钮被按下或松开的情 况下键盘的Shift、Ctrl和Alt键的状态,它的取值为 0~7的整数,与前面KeyDown、KeyUp事件中的Shift 参数完全相同,如表6-2所示。 ③ 参数X、Y:鼠标指针的位置。X和Y的值是使用该 对象的坐标系统表示鼠标指针当前的位置。

键盘和鼠标事件

键盘和鼠标事件

例如:直接按光标键时移动图片的位置,按 下Shift键再按光标键时放缩图片,按 Shift+Ctrl键时复位图片的位置及大小。 将窗体的KeyPreview属性设置为True Image1的Strech属性设置为True.

Private Sub Form_Load() Label1.Caption = "直接按光标键移动图片,按下 Shift键再按光标键放缩图片,按Shift+Ctrl键复 位图片。" End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If Shift = 3 Then Image1.Move 2000, 1000, 1000, 1000 '复位图 片 End If
KeyPress事件中得到的是按键对应的字符 的ASCII码(KeyAscii) KeyUp,KeyDown事件中得到的是按键对应 的键号(KeyCode),键盘104个键都对应着 唯一的键号。

KeyPress事件 对象的KeyPress事件过程的一般格式为:
Privat Sub Object_KeyPress(KeyAscii As Integer)
Function ShiftStatus(Shift As Integer) As String Select Case Shift Case 0: s = "" Case 1: s = “Shift+" Case 2: s = "Ctrl+" Case 3: s = "Shift+Ctrl+" Case 4: s = "Alt+" Case 5: s = "Shift+Alt+" Case 6: s = "Ctrl+Alt+" Case 7: s = "Shift+Ctrl+Alt+" End Select ShiftStatus = s End Function

第6章 习题参考答案

第6章 习题参考答案

一、填空题1.控制控件是否可见的属性为__Visible__;控制控件是否可用的属性为__Enabled__;控件的位置是由___Left__和___Top___属性来确定的;控件的大小是由___Width___和___Height___属性来确定;控件上所显示的文本是由__Caption__属性来设定的;控件的外观样式是由__Appearance__来设定,该属性有0和1两个取值。

2.与鼠标有关的事件包括__Click___、__DblClick__、__ MouseDown__、___ MouseUp __、__MouseMove__,其中__ Click __事件在单击控件时被激发,_ MouseDown __事件在鼠标键被按下时被激发,_ MouseUp__事件在鼠标被松开时被激发,_ DblClick __事件在双击控件时被激发。

3.与键盘有关的事件包括__ KeyPress __、KeyDown 、KeyUp __,其中_KeyPress 事件在单击键盘键时被激发,_ KeyDown __事件在按下键盘键时被激发,_ KeyUp __事件在松开键盘键时被激发。

4.要想标签控件能根据所显示的内容自动调整大小,则必须将AutoSize属性设为__ True _。

5.要想在文本框中输入多行内容,则必须将MultiLine属性设为__ True ____。

当文本框中的内容发生改变时,便会激发__ Change __事件,文本框中所输入的内容由_ Text __属性返回。

6.向列表框和组合框中添加列表时,可使用AddItem 方法;删除选定的列表,可使用RemoveItem 方法;删除全部列表项,可使用方法Clear 。

7.滚动条所能代表的范围是由Min 和Max 属性来确定的,滚动条当前所代表的值由Value 属性返回。

当单击滚动条两端的箭头时,滚动条的增量值是由SmallChange 属性决定的,当单击滚动条的空白处时,滚动条的增量值是由LargeChange 属性决定的。

鼠标和键盘事件

鼠标和键盘事件

第14页
5、标签数组的使用 Label[] lblArray; lblArray; lblArray = new Label[] { label1, label4, label5, label4 label5 label6 label7 label8 label6, label7, label8 }; 将所有label1的地方外层加循环 的地方外层加循环, label1改为 将所有label1的地方外层加循环,将label1改为 lblArray[i]
第9页
【打字游戏】 打字游戏】
要使窗体在可以获得焦点的控件之前截获键盘事件, 要使窗体在可以获得焦点的控件之前截获键盘事件, 应该将窗体的KeyPreview属性设为 属性设为true。 应该将窗体的 属性设为 。 (1)窗体的KeyPreview属性设为 )窗体的 属性设为true 属性设为 (2)int score //表示得分 ) 表示得分
第11页
2、标签上文字的获取 假设范围为英文字母A 假设范围为英文字母A—Z。 Random aa=new Random(); label1.Text= ( (char) aa.Next(65,91)).ToString();
第12页
3、键盘事件 private void Form1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == char.Parse(label1.Text) || e.KeyChar == char.Parse(label1.Text.ToLower())) { score += 10; label3.Text = score.ToString(); label1.Text = ((char)aa.Next(65, 91)).ToString(); label1.Top = 20问题 1、鼠标的位置 、 2、哪个鼠标按键按动 、

C#处理鼠标和键盘事件

C#处理鼠标和键盘事件

在程序运行中,产生事件的主体有很多,其中尤其以键盘和鼠标为最多。

本文就来探讨一下在C#中和这二个主体相关的事件的处理过程。

一.本文介绍的程序设计和运行的软件环境:(1).微软公司视窗2000服务器版(2) FrameWork SDK Beta 2二.C#中处理鼠标相关的事件:鼠标相关的事件大致有六种,分别是:"MouseHover"、"MouseLeave"、"MouseEnter"、"MouseMove"、"MouseDown"和"MouseUp"。

(1).如何在C#程序中定义这些事件:在C#中是通过不同的Delegate来描述上述事件,其中描述"MouseHover"、"MouseLeave"、"MouseEnter"事件的Delegate是"EventHandler",而描述后面的三个事件的Delegate是"MouseEventHandler"来描述。

这二个Delegate分别被封装在不同的命名空间,其中"EventHandler"被封装在"System"命名空间;"MouseEventHandler"被封装在"Syetem.Windows.Froms"命名空间中的。

在为"MouseHover"、"MouseLeave"、"MouseEnter"事件通过数据的类是"EventArgs",他也被封装在"System"命名空间中;而为后面的三个事件提供数据的类是"MouseEventArgs",他却被封装在"Syetem.Windows.Froms"命名空间。

Chapter_6

Windows 程序设计
—— Chapter 6 键盘与鼠标消息
20102010-09 中南民盘消息
键盘上的每一个键都对应一个唯一的扫 键盘上的每一个键都对应一个唯一的扫 描码,并在按下或释放时产生通知。 描码,并在按下或释放时产生通知。 扫描码是设备相关的。在Windows系统 扫描码是设备相关的。在Windows系统 中为实现设备无关的要求,需要使用虚拟 中为实现设备无关的要求,需要使用虚拟 键值,定义一组与设备无关的标示符。 键值,定义一组与设备无关的标示符。 一般情况下,处理键盘消息就是根据不 一般情况下,处理键盘消息就是根据不 处理键盘消息就是 同的虚拟键值来识别不同的按键状态。 同的虚拟键值来识别不同的按键状态。
WM_KEYDOWN和WM_KEYUP成对出现。 WM_KEYDOWN和WM_KEYUP成对出现。 例如:R 例如:R键消息。 keybd_event(‘ keybd_event(‘R’,0,0,0); keybd_event(‘ keybd_event(‘R’,0, WM_KEYUP,0);
14
&6.2 鼠标消息
19
小结
本章学习了键盘和鼠标的消息处理,模拟 消息的机制。 到此,软件设计的基础部分已经讲完,现 在你们已经可以设计各种应用程序了。
20
BOOL PostMessage ( HWND hWnd, //窗口或者控件句柄 UINT Msg, //消息 WPARAM wParam, //参数 LPARAM lParam ); VOID keybd_event( BYTE bvk, //虚拟键值 BYTE bScan, DWORD dwFlag, PTR dwExtraInfo //附加信息 );
2
&6.1.1 键盘消息的类型 键盘消息的响应过程: 1.当有键盘事件发生时,设备驱动程序首先获 1.当有键盘事件发生时,设备驱动程序首先获 取键的扫描码,并转化为虚拟键值。 取键的扫描码,并转化为虚拟键值。 2.然后把消息发给当前系统中具有键盘输入焦 2.然后把消息发给当前系统中具有键盘输入焦 点的程序。 3.应用程序则根据MSG结构中的参数信息将其 3.应用程序则根据MSG结构中的参数信息将其 派发到对应的控件或者窗口。

第6章 Windows应用程序对键盘与鼠标的响应-PPT课件


//输入位置为本行的起始位置
break;
case VK_DELETE:
//处理按下键为Delete时的消息
if(nArrayPos==nNumChar) //输入位置处于本行的末尾
MessageBox(hWnd,
"缓冲区已空,没有字符可供删除",NULL,MB_OK);
else
{
for(x=nArrayPos;x<nNumChar;x=x+1)
若字符缓冲区中已没有任 何字符,此时按下了 Delete键,则出现(5)号错 误提示信息
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
#define BufSize 30
//设置存放字符的缓冲区大小
//设置静态字符数组,存放输入的字符,字符个数不能超出缓冲区大小
操作系统在接收到键盘输入后,还要决定哪一个应用程序将响应输入
Windows系统把消息发送给具有“输入焦点(input focus)的窗口
应用程序一般有几个窗 口,但当按下某一个键 时,只有一个窗口能接 收到该键盘消息,接收 这个键盘消息的窗口称 为有“输入焦点”的窗口
有“输入焦点” 的窗口应是活 动窗口或者活 动窗口的子窗口
12
含义 非系统字符 非系统死字符 系统字符 系统死字符
6.2 键盘操作应用举例
【例6-1】本例演示键盘输入时所产生的消息序列并在窗口的客 户区显示对应的字符。
13
用户窗口区输入“这是一 个有关键盘操作的示例程 序”的字符串
程序中缓冲区大小只设30 个字符,当缓冲区满时若 再输入任何字符,就出现 (1)号错误提示

项目十 鼠标和键盘事件的响应


else if(e.getKeyChar()=='b'||e.getKeyChar()=='B') c=Color.blue;
else c=Color.black;
repaint(); }} public void paint(Graphics g) {
g.setColor(c); g.fillOval(60,60,100,100); } public static void main(String args[]){ new hh(); } }
(4)mouseExited(MouseEvent)方法,鼠标指针离开容器时, 接口监视器发现这个事件后自动调用这个方法。
new hh(); } }
10.2.3 键盘适配器类KeyAdapter
使用KeyListener接口时,即使有些方法不使用也必须在 程序中写出接口的所有方法,因此比较麻烦,而 java.awt.event.keyAdapter类本身就使用了KeyListener接口, 并对接口的三个方法增加了空方法体,因此使用keyAdapter 类时不必像使用接口那样实现所有方法,只需覆盖要响应的 键盘事件方法即可。
④事件监听器监听到事件后,会根据事件的类型调用相应的 事件处理方法。
事件源
产生事 件
事件 1
捕获事件
监视器1
事件 2
监视器2
图10-1 事件处理模型
事件处 理
事件处 理
1.java.awt.event包
(1)文本框回车、按钮单击、计时器、菜单项 引发动作事件:java.awt.event.ActionEvent 处理事件的接口:java.awt.event.ActionListener 接口中的方法:public void actionPerformed(ActionEvent event) (2)单选按钮、多选按钮、下拉列表 引发选项事件:java.awt.event.ItemEvent 处理事件的接口:java.awt.event.ItemListener 接口中的方法:public void itemStateChanged(ItemEvent event)

3.7-3.12鼠标、键盘事件


18
3.10
3.10.2 键盘事件
鼠标与键盘事件
2.KeyDown和KeyUp事件 KeyDown和KeyUp事件报告键盘本身准确的物理状态:按 下键(KeyDown)及松开键KeyUp)。KeyPress事件并不直接地 报告键盘状态,它只提供被按键所代表的字符而不识别键的 按下或松开状态。例如:运行如下程序,当按下C键时,程 序就会在窗体的(400,500)处画一个半径为300的圆。 Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 67 Then '如果按下C键 Circle (400, 500), 300 End If End Sub
21
3.10 鼠标与键盘事件
3.10.3 鼠标拖放改变控件位置
该事件过程提供了3个参数:Source、X和Y。其中, Source引用被拖动的对象,X和Y记录松开鼠标时的光标位 置。 [例3-17] 编写一个程序,允许图像框通过拖动改变位 置。
22
3.11窗体
3.11.1窗体的添加
用菜单添加新窗体的步骤如下: ① 从“工程”菜单中选择“添加窗体”命令。 ② 系统将显示“添加窗体”对话框。 ③ 该对话框的“新建”选项卡用于创建一个新窗体, 列表框中列出了各种新窗体的类型,选择其中的“窗体” 选项时,建立一个空白的新窗体。如果添加已存在的窗体, 则选择“现存”选项卡。 ④ 单击“打开”按钮,一个空白窗体被加入到当前工 程中。 也可在工程资源管理器窗口中的工程名称或窗体名称上 单击右键,从快捷菜单中选择 “添加”→“添加窗体”命 令。
3.7.2 使用通用对话框控件
1.保存文件对话框和打开文件对话框 ⑴ Filter属性 在显示对话框之前,首先使用Filter属性来设置默认要 打开和保存的文件的类型,该属性的取值是一个字符串, 由一组或多组文件类型表达式构成,每组代表一类文件。 构成规则是: 类型说明|类型通配表达式[ |类型说明|类型通配表达 式]„ 例: CommonDialog1.Filter = "文本文件(*.Txt)|*.Txt|VB 源程序(*.Bas)|*.Bas "
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

入数字、小数点,只能响应BackSpace 键及回车键。
Private Sub Text1_KeyPress (KeyAscii As Integer)
Select Case KeyAscii
Case 48 to 57,46,8,13 Case Else KeyAscii=0 End Select
End Subຫໍສະໝຸດ KeyPress 按下对应某ASCII 字符的键。
KeyDown 按下键盘的任意键。 KeyUp 释放键盘的任意键。 6.2.1 KeyPress 事件 在按下与ASCII字符对应的键时将触发KeyPress 事件。
KeyPress 事件过程的语法格式是:
Sub Object_KeyPress (KeyAscii As Integer) 其中: Object是指窗体或控件对象名,KeyAscii 参数返回对应 于ASCII字符代码的整型数值。
KeyDown和KeyUp事件能够检测其它功能键、编辑键和定位键。 KeyUp 和 KeyDown 事件过程的语法格式如下:
Sub Object_KeyDown(KeyCode As Integer, Shift As Integer)
Sub Object_KeyUp(KeyCode As Integer, Shift As Integer)
本章内容及要求
6.1 使用鼠标 6.2 使用键盘 6.3 设计菜单
6.1 使用鼠标 大多数控件能够识别鼠标的MouseMove、MouseDown和
MouseUp事件,通过响应这些鼠标事件,能在应用程序对
鼠标位置及状态的变化作出响应操作。 MouseMove 每当鼠标指针移动到屏幕新位置时发生
Case vbLeftButton
„左键 1
LabRight.BackColor = 12632256 LabMid.BackColor = 12632256 LabLeft.BackColor = vbRed
End Select
End Sub
6.2 使用键盘 在Visual Basic中,提供KeyPress、KeyDown、KeyUp三 种键盘事件,窗体和接受键盘输入的控件都识别这三种事件, 只有获得焦点的对象才能够接受键盘事件。
KeyPress 事件只识别 Enter、Tab和Backspace 键。不能
检测其它功能键、编辑键和定位键。
6.2.2 KeyDown 和 KeyUp 事件 当一个对象具有焦点时按下(KeyDown) 或松开 ( KeyUp ) 一个键时发生。它们报告键盘本身准确的物理状 态:按下键 (KeyDown) 及松开键 (KeyUp)。
2.shift参数
shift 表示是在该事件发生时响应SHIFT、CTRL 和 ALT 键 的状态,它是一个整数。其含义与上一节中MouseMove、
MouseDown、MouseUp事件中的shift参数完全相同。
例如:下例是用Shift参数判断是否按下了字母的大写形式。 Private Sub Text1_KeyDown(KeyCode As
Integer, Shift As Integer)
If KeyCode = vbKeyA And Shift = 1 Then
MsgBox "You pressed the uppercase A key."
End if End Sub
课堂练习
1、以下关于KeyPress事件过程中参数KeyAscii 的叙述中正确的是 A)KeyAscii参数是所按键的ASCII码 B)KeyAscii参数的数据类型为字符串 C)KeyAscii参数可以省略 D)KeyAscii参数是所按键上标注的字符
【例2】 Private Sub Text1_KeyDown(KeyCode As _ Integer, Shift As Integer) If KeyCode = vbKeyA Then MsgBox "You pressed the A key.“ End if End Sub Private Sub Text1_KeyDown(KeyCode As _ Integer, Shift As Integer) If KeyCode = vbKey1 And shift=1 Then MsgBox "You pressed the ! key.“ End if End Sub
先后顺序KeyDown KeyPress Keyup
2010-03-18:VB中有3个键盘事件:KeyPress、KeyDown、 KeyUp,若光标在Text1文本框中,则每输入一个字母 A)这3个事件都会触发 B)只触发KeyPress事件 C)只触发KeyDown、KeyUp事件 D)不触发其中任何一个事件
【例】编写一个程序,确定是哪个鼠标键被按下。
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y
As Single) Select Case Button Case vbRightButton „右键 2 LabRight.BackColor = vbRed LabMid.BackColor = 12632256 LabLeft.BackColor = 12632256 Case vbMiddleButton „中间键 4 LabRight.BackColor = 12632256 LabMid.BackColor = vbRed LabLeft.BackColor = 12632256
课堂练习 设窗体上有一个名为Text1的文本框,并编写如下程序: Private Sub Form_Load() Show Text1.Text = “” Text1.SetFocus End Sub Private Sub Form_MouseUp(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Print “程序设计” End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) Print “Visual Basic”; End Sub 程序运行后,如果在文本框中输入字母“a”,然 后单击窗体,则在窗体上显示的内容是 A)Visual Basic C)Visual Basic程序设计 B)程序设计 D)a程序设计
Sub 对象t _MouseUp(Button As Integer,Shift As Integer,_ X As Single,Y As Single)
其中: 1.对象可以是窗体对象和大多数可视控件。 2.Button参数是表示按下或松开鼠标左中右的哪个按钮。 3.Shift参数表示键盘的Shift、Ctrl和Alt键的状态,
参数Button值
参数(Button) vbLeftButton vbRightButton vbMiddleButton 值 1 2 4 说明 左按钮被按下 右按钮被按下 中间按钮被按下
参数Shift值
参数(Shift) vbShiftMask vbCtrlMask vbAltMask
4. 参数X、Y
值 1 2 4
描述 SHIFT 键被按下 CTRL 键被按下 ALT 键被按下
X, Y鼠标指针的位置,通过X和Y参数返回一个指定鼠 标指针当前位置的数,X和Y的值是使用该对象的坐标系统 表示鼠标指针当前位置。
注意: 鼠标事件被用来识别和响应各种鼠标状态,并把这些状 态看作独立的事件,在按下鼠标按钮并释放时,Click 事 件只能把此过程识别为一个单一的单击操作。鼠标事件 能够区分各鼠标按钮及键盘的SHIFT、CTRL、ALT 键的 状态。
Static:静态变量
的定义,事件过 程结束内存空间 不回收,直到整 个应用程序结束 才回收空间。
Mousepointer属性表
2010-03-25:要求当鼠标在图片框P1中移动时,立即在图片框中显示鼠标 的位置坐标。下面能正确实现上述功能的事件过程是 A)Private Sub P1_MouseMove(Button AS Integer,Shift As Integer,X As Single, Y As Single) Print X,Y End Sub B)Private Sub P1_MouseDown(Button AS Integer,Shift As Integer,X As Single, Y As Single) Picture.Print X,Y End Sub C) Private Sub P1_MouseMove(Button AS Integer,Shift As Integer,X As Single, Y As Single) P1.Print X,Y End Sub D)Private Sub Form_MouseMove(Button AS Integer,Shift As Integer,X As Single, Y As Single) P1.Print X,Y End Sub
MouseDown
MouseUp
按下任意鼠标键按钮时发生
释放任意鼠标键按钮时发生
6.1.1 鼠标事件 MouseMove、MouseDown、MouseUp 三个事件的过程的语法格式如下:
Sub 对象_MouseMove(Button As Integer,Shift As Integer,_ X As Single,Y As Single) Sub 对象 _MouseDown(Button As Integer,Shift As Integer,_ X As Single,Y As Single)
说明: 1.Keycode 参数表示按下的物理键。上档键字符和下档键 字符也是使用同一键,它们的Keycode值相同。
相关文档
最新文档