基类窗体处理按回车键自动跳到下一输入控件
基本软件需求: 按回车键或Tab键自动将焦点跳到下一个输入控件.有些用户不喜欢点鼠标和键盘间来回切换,嫌麻烦! 开发框架为您排难解纷,可以在基类窗体集成这个功能.
特别处理的控件如MemoEdit,TextEdit本身支持多行输入, 如果在这些控件内按回车键自动跳到下一个输入框就不合理了,所以考虑到这种情况。另外,GridControl.GridView组件自身有"EnterMoveNext"功能,也要排除这些组件.
在基类只能处理可预知的输入控件,未知类型的只能由具体的派生窗体自行处理, 因此基类必须定义一个虚方法,如:IsMultiLineInputControl(),用于判断当前控件是否要处理. 另外, 定义 _EnterFocusNextControl变量标记是否执行"EnterMoveNext"功能. 捕获用户按键需要将基类窗体KeyPreview属性设为True.
代码:
C# Code:
//捕获用户按键
private void frmBase_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar == (char)Keys.Enter) && (_EnterFocusNextControl))
{
this.DoFocusNextControl(e); //交给按键处理程序
}
}
//捕获用户按键
private void frmBase_KeyPress(object sender, KeyPressEventArgs e)
{
if ((e.KeyChar == (char)Keys.Enter) && (_EnterFocusNextControl))
{
this.DoFocusNextControl(e); //交给按键处理程序
}
}
C# Code:
/// <summary>
/// 按回车键自动将焦点移到下一输入框
/// </summary>
protected virtual void DoFocusNextControl(KeyPressEventArgs e)
{
Control c = this.ActiveControl;//取当前焦点状态的控件
if (IsMultiLineInputControl(c)) return; //调用模板方法
this.SelectNextControl(c, true, false, true, true);
//处理完毕, 转为No Key Pressed状态.
e.KeyChar = (char)Keys.None;
e.Handled = true;
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
/// <summary>
/// 按回车键自动将焦点移到下一输入框
/// </summary>
protected virtual void DoFocusNextControl(KeyPressEventArgs e)
{
Control c = this.ActiveControl;//取当前焦点状态的控件
if (IsMultiLineInputControl(c)) return; //调用模板方法
this.SelectNextControl(c, true, false, true, true);
//处理完毕, 转为No Key Pressed状态.
e.KeyChar = (char)Keys.None;
e.Handled = true;
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
C# Code:
/// <summary>
/// 是否可输入多行的控件
/// </summary>
/// <param name="c">当前控件</param>
/// <returns></returns>
protected virtual bool IsMultiLineInputControl(Control c)
{
if ((c is TextBox) && ((c as TextBox).Multiline == true)) return true;
if (c is MemoEdit) return true;
return false;
}
/// <summary>
/// 是否可输入多行的控件
/// </summary>
/// <param name="c">当前控件</param>
/// <returns></returns>
protected virtual bool IsMultiLineInputControl(Control c)
{
if ((c is TextBox) && ((c as TextBox).Multiline == true)) return true;
if (c is MemoEdit) return true;
return false;
}
参考文档:
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
