基类窗体处理按回车键自动跳到下一输入控件
基类窗体处理按回车键自动跳到下一输入控件
基本软件需求: 按回车键或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;
}
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网