基类窗体处理按回车键自动跳到下一输入控件
作者:C/S框架网  发布日期:2011/04/26 20:44:03
基类窗体处理按回车键自动跳到下一输入控件



基本软件需求: 按回车键或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); //交给按键处理程序
   }
}


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



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;
}


上一篇 下一篇