技术开发 频道

.NET Windows编程:.NET程序交互


    在Windows编程中,用户输入(包括鼠标输入和键盘输入)是非常重要的一个话题。本节介绍如何处理用户输入、输入验证、Windows程序中鼠标的托放功能、如何模拟用户输入等。
一、用户输入
    在Windows 窗体中,用户输入以Windows 消息的形式发送到应用程序。
    一系列可重写的方法在应用程序、窗体和控件级处理这些消息。当这些方法接收到鼠标和键盘消息时,将引发相应的事件,可以处理这些事件来获取关于鼠标或键盘输入的信息。
    在许多情况下,Windows 窗体应用程序可以仅仅通过处理这些事件来处理所有用户输入。
    所有Windows 窗体控件都继承一组与鼠标和键盘输入有关的事件。

二、键盘输入
    Windows 窗体通过引发键盘事件来处理键盘输入以响应Windows 消息。
    键盘事件:当用户按键盘键时,Windows 窗体提供两个事件,而当用户松开键盘键时,Windows 窗体提供一个事件。
    KeyDown事件发生一次;KeyPress事件,当用户按住同一个键时,该事件可以发生多次。当用户松开键时,KeyUp事件发生一次。

键盘事件



    KeyPressEventArgs.KeyChar获取或设置与按下的键对应的字符。
    可以获取或设置以下键:a-z、A-Z、Ctrl、标点符号、键盘顶部和数字键盘上的数字键、Enter。
    不能获取或设置以下键:Tab 键、Insert 和Delete、Home、End、Page Up 、Page Down、F1-F12、Alt、箭头键。

    Keys 枚举指定键代码和修饰符。
     例如:Keys.D0:表示0 键;Keys.NumPad0:表示数字键盘上的0 键;Keys.Add:加号键;Control:Ctrl修改键;       Delete:DeL键;Enter:Enter键。

在窗体级别处理键盘输入
    Windows 窗体提供在键盘消息到达控件前在窗体级别处理这些消息的功能。 
    处理启动窗体的KeyPress或KeyDown事件,将窗体的KeyPreview属性设置为true,使键盘消息在到达窗体上的任何控件之前先被窗体接收。

确定所按下的修改键
    在创建接受用户击键的应用程序时,您可能还希望监视修改键,如Shift、Alt 和Ctrl 键。并希望在同时按下修改键和其他键,或者单击鼠标的同时按下修改键时,您的应用程序可以做出适当的响应。
     如果处理KeyDown事件,则事件处理程序所接收的KeyEventArgs的Modifiers 属性指定按下。
     如果处理KeyPress事件或鼠标事件,必须使用Control 类的ModifierKeys属性。
     Control.ModifierKeys:获取一个值,该值指示哪一个修改键(Shift、Ctrl 和Alt)处于按下的状态。
     DEMO1:键盘输入示例


三、数据验证

    若要验证控件的内容,可以编写代码来处理Validating 事件。
    属性CausesValidation
    如果测试失败,请将Validating 事件的CancelEventArgs的Cancel 属性设置为true。这将取消Validating 事件,并导致焦点返回到控件。
    当数据无效时,维护焦点的控件的副作用是,使用关闭窗体的任何常规方法都将无法关闭父窗体。必须重写窗体的Closing 事件。
    DEMO2:控件验证示例

四、鼠标输入
    接收和处理鼠标输入是每个Windows 应用程序的重要组成部分。
    处理鼠标输入时,经常需要知道鼠标指针的位置和鼠标按钮的状态。
    MouseEventArgs提供有关鼠标当前状态的信息,包括鼠标指针在工作区坐标中的位置、按下了哪个鼠标按钮以及是否滚动了鼠标轮。
   也可以使用Control 类的MouseButtons和MousePosition属性。
   MouseButtons返回当前按下的鼠标按钮的有关信息。
   MousePosition返回鼠标指针的屏幕坐标,该值等于Position 返回的值。
   DEMO3:线条和矩形的绘制

五、Windows 窗体中的拖放功能
    Windows 窗体包含一组用于实现拖放行为的方法、事件和类。
    使用Control 类的DoDragDrop方法可以完成托放操作。
    DragEventArgs类提供鼠标指针的位置、鼠标按钮和键盘修改键的当前状态、正在拖动的数据和DragDropEffects值
    在拖放操作中有两类事件:一类是在拖放操作的当前目标上发生的事件;一类是在拖放操作的源上发生的事件。

当前目标上的事件


源上的事件
    QueryContinueDragEventArgs类提供鼠标按钮和键盘修改键的当前状态、指定是否按下了Esc 键的值和DragAction值(设置该值可指定是否应继续拖放操作)。


如何实现拖放操作

    拖动数据:所有拖放操作都从拖动开始。实现在拖动开始时收集数据的功能在DoDragDrop方法中实现。
    放置数据:可以通过设置AllowDrop属性并处理DragEnter和DragDrop事件,使Windows 窗体或控件内的任何区域接受放置的数据。
DEMO4:数据托放

六、如何模拟输入
模拟鼠标事件:非常好的方法是调用引发要模拟的鼠标事件的OnEventName方法。此选项通常只在自定义控件和窗体中是可能的,因为引发事件的方法受保护,而且不能从控件或窗体外部访问。
模拟键盘输入:Windows 窗体提供了用于将键击发送到活动应用程序的SendKeys类。
DEMO5:模拟及计算器键盘输入

七、简易画图程序
DEMO6:简易画图程序



0
相关文章