三、数据验证
若要验证控件的内容,可以编写代码来处理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:简易画图程序