zoukankan      html  css  js  c++  java
  • 给所有的Control加两个属性,实现回车键自动跳转到下一个控件

    最近一个朋友要做一个操作非常方便的Windows应用程序,就是希望通过按回车键或者上下键,在输入项之间自动跳转,国人都不习惯
    使用Tab/Shift Tab在输入项之间的跳转。我之前也使用了一些别的方法,如:首先将需要跳转的输入项放置到一个集合对象ArrayList里;
    然后设置Form的PreKeyView为True;最后 给Form添加一个KeyDown事件处理程序。虽然是一个办法。但总觉得不够专业。
    前不久在WWW.CodeProject.COM看了一个老外写的一篇文章http://www.codeproject.com/cs/menu/menuimage.asp,是关于如何做一个带
    图标的菜单的,大部分人写这样的程序都是重写MenuItem,重载MenuItme的OnDrawItem和OnMeasureItme方法,可是这位老大独树一帜,
    去做了一个叫MenuImage的类,它实现了System.ComponentModel.IExtenderProvider 接口,在设计期给MenuItem扩展了一个属性
    MenuImage。如下图:


    这篇文章给了我极大的启发,决定做一个给所有的Control“扩展” 两个属性NextControl和PreviousControl,这样按回车或者上下键就可以跳转了。
    首先创建一个类ControlFocus
    [ProvideProperty( "NextControl", typeof(Component)) ]
    [ProvideProperty( "PreviousControl", typeof(Component)) ]
    public class ControlFocus:Component, IExtenderProvider
    第一行和第二行是什么意思呢,就是这个ExtenderProvider会给别的Control扩展两个属性NextControl和PreviousControl
    同时要求在ControlFocus类里面包含下面四个方法:
    GetNextControl/SetNextControl/GetPreviousControl/SetPreviousControl
    另外ControlFocus这个ExtenderProvider必须实现IExtenderProvider的CanExtend方法。
    下面就是ControlFocus类的全部源代码:

    ControlFocus


    其次创建一个示例窗口.如下:



    程序的全部源代码,请下载:

     

     

     


     

  • 相关阅读:
    在Visual Studio中怎样快速添加代码段
    18个不常见的C#关键字,您使用过几个?
    C# 非常好用的组元Tuple
    C# List根据另一个List集合或数组排序
    Expression 核心操作符、表达式、操作方法
    如何避免频繁创建临时对象
    C# 23种设计模式
    C# 23种设计模式
    Api Cloud官方日期类型转换
    sql server 保留小数(续A)
  • 原文地址:https://www.cnblogs.com/SharkXu/p/EnterGoto.html
Copyright © 2011-2022 走看看