Winform开发框架功能细节处理集锦
Winform开发框架功能细节处理集锦
1. 在表格最后一条记录的最后一栏按回车键新增一条记录。
GridView.OptionsNavigation有EnterMoveNextColumn的功能,即按回车自动将焦点移到下一列。但用户要求当移到最后一行最后一列时按回车要自动新增一条记录。
处理表格KeyDown事件:
使用方法:
2. 从输入框跳转到明细表格并新增记录
有些用户习惯按回车键跳转输入框的焦点,并且自动完成一些操作。比如在主表输入区域的最后一个输入框按回车要跳转到明细表格,当表格无记录的时候要自动新增。
处理细节:
1.自动跳转到明细表格并设置焦点。
2.当明细表没有记录自动新增一条记录。
使用方法:
3. 明细表设置“新增记录”的快捷键。
在frmBaseChild窗体处理快捷键,设Form.KeyPreview=True,在KeyDown事件内调用模板方法DoExecuteHotKey。
业务窗体重写DoExecuteHotKey方法,处理Alt+Q 键。
扫一扫加作者微信
1. 在表格最后一条记录的最后一栏按回车键新增一条记录。
GridView.OptionsNavigation有EnterMoveNextColumn的功能,即按回车自动将焦点移到下一列。但用户要求当移到最后一行最后一列时按回车要自动新增一条记录。
处理表格KeyDown事件:
C# Code:
/// <summary>
/// 处理表格KeyDown事件。
/// <para>在表格最后一条记录的最后一栏按回车键新增一条记录</para>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void OnDetailGridViewKeyDown(object sender, KeyEventArgs e)
{
if (!(e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)) return;
GridView view = (GridView)sender;
//最后一条记录
if ((view.FocusedRowHandle == view.RowCount - 1) &&& IsLastEditableColumn(view, view.FocusedColumn))
{
e.Handled = true;
//下面代码: 最后可编辑栏位,则新增记录.
Form dataForm = view.GridControl.FindForm();
if ((dataForm is frmBaseDataForm) & (view.GridControl.EmbeddedNavigator.Buttons.CustomButtons.Count > 0))
{
NavigatorButtonBase addButton = view.GridControl.EmbeddedNavigator.Buttons.CustomButtons[0];//新增按钮
view.GridControl.EmbeddedNavigator.Buttons.DoClick(addButton);
}
}
}
private static bool IsLastEditableColumn(GridView view, GridColumn focusedColumn)
{
int idx = view.VisibleColumns.IndexOf(focusedColumn);
for (int i = view.VisibleColumns.Count - 1; i >= 0; i--)
{
GridColumn col = view.VisibleColumns[i];
//忽略不可编辑Column
if (!col.OptionsColumn.AllowEdit) continue;
if (idx != i)
return false; //非最后一个可编辑Column
else
return true;
}
return true;
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
/// <summary>
/// 处理表格KeyDown事件。
/// <para>在表格最后一条记录的最后一栏按回车键新增一条记录</para>
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public static void OnDetailGridViewKeyDown(object sender, KeyEventArgs e)
{
if (!(e.KeyCode == Keys.Enter || e.KeyCode == Keys.Tab)) return;
GridView view = (GridView)sender;
//最后一条记录
if ((view.FocusedRowHandle == view.RowCount - 1) &&& IsLastEditableColumn(view, view.FocusedColumn))
{
e.Handled = true;
//下面代码: 最后可编辑栏位,则新增记录.
Form dataForm = view.GridControl.FindForm();
if ((dataForm is frmBaseDataForm) & (view.GridControl.EmbeddedNavigator.Buttons.CustomButtons.Count > 0))
{
NavigatorButtonBase addButton = view.GridControl.EmbeddedNavigator.Buttons.CustomButtons[0];//新增按钮
view.GridControl.EmbeddedNavigator.Buttons.DoClick(addButton);
}
}
}
private static bool IsLastEditableColumn(GridView view, GridColumn focusedColumn)
{
int idx = view.VisibleColumns.IndexOf(focusedColumn);
for (int i = view.VisibleColumns.Count - 1; i >= 0; i--)
{
GridColumn col = view.VisibleColumns[i];
//忽略不可编辑Column
if (!col.OptionsColumn.AllowEdit) continue;
if (idx != i)
return false; //非最后一个可编辑Column
else
return true;
}
return true;
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
使用方法:
C# Code:
gvDetail.KeyDown = new KeyEventHandler(GridMovetor.OnDetailGridViewKeyDown);
gvDetail.KeyDown = new KeyEventHandler(GridMovetor.OnDetailGridViewKeyDown);
2. 从输入框跳转到明细表格并新增记录
有些用户习惯按回车键跳转输入框的焦点,并且自动完成一些操作。比如在主表输入区域的最后一个输入框按回车要跳转到明细表格,当表格无记录的时候要自动新增。
处理细节:
1.自动跳转到明细表格并设置焦点。
2.当明细表没有记录自动新增一条记录。
C# Code:
#region 主表最后一个输入框按回车,自动跳转到明细表格。
//
//处理细节:
//
// 1.自动跳转到明细表格并设置焦点。
// 2.当明细表没有记录自动新增一条记录。
//
private GridView _DetailView = null;
protected virtual void DoJumpToGrid(Control fromControl, GridView toGrid)
{
//KeyDown事件,处理Enter/Tab键
fromControl.KeyDown = new KeyEventHandler(OnFromControl_KeyDown);
_DetailView = toGrid;
}
protected void OnFromControl_KeyDown(object sender, KeyEventArgs e)
{
//KeyDown事件,处理Enter/Tab键
if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Tab))
{
e.Handled = true;
_DetailView.Focus();
if ((_DetailView.RowCount == 0) && (this.IsAddOrEditMode))
{
NavigatorButtonBase addButton = _DetailView.GridControl.EmbeddedNavigator.Buttons.CustomButtons[0];//新增按钮
_DetailView.GridControl.EmbeddedNavigator.Buttons.DoClick(addButton);
}
_DetailView.FocusedRowHandle = 0;
_DetailView.FocusedColumn = _DetailView.VisibleColumns[0];//第一个可见栏位
}
}
#endregion
//来源:C/S框架网(www.csframework.com) QQ:1980854898
#region 主表最后一个输入框按回车,自动跳转到明细表格。
//
//处理细节:
//
// 1.自动跳转到明细表格并设置焦点。
// 2.当明细表没有记录自动新增一条记录。
//
private GridView _DetailView = null;
protected virtual void DoJumpToGrid(Control fromControl, GridView toGrid)
{
//KeyDown事件,处理Enter/Tab键
fromControl.KeyDown = new KeyEventHandler(OnFromControl_KeyDown);
_DetailView = toGrid;
}
protected void OnFromControl_KeyDown(object sender, KeyEventArgs e)
{
//KeyDown事件,处理Enter/Tab键
if ((e.KeyCode == Keys.Enter) || (e.KeyCode == Keys.Tab))
{
e.Handled = true;
_DetailView.Focus();
if ((_DetailView.RowCount == 0) && (this.IsAddOrEditMode))
{
NavigatorButtonBase addButton = _DetailView.GridControl.EmbeddedNavigator.Buttons.CustomButtons[0];//新增按钮
_DetailView.GridControl.EmbeddedNavigator.Buttons.DoClick(addButton);
}
_DetailView.FocusedRowHandle = 0;
_DetailView.FocusedColumn = _DetailView.VisibleColumns[0];//第一个可见栏位
}
}
#endregion
//来源:C/S框架网(www.csframework.com) QQ:1980854898
使用方法:
C# Code:
//在“国家、区域”输入框内按回车,自动跳转到明细表格并新增一新记录。
this.DoJumpToGrid(txtRegion, gvDetail);
//在“国家、区域”输入框内按回车,自动跳转到明细表格并新增一新记录。
this.DoJumpToGrid(txtRegion, gvDetail);
3. 明细表设置“新增记录”的快捷键。
在frmBaseChild窗体处理快捷键,设Form.KeyPreview=True,在KeyDown事件内调用模板方法DoExecuteHotKey。
C# Code:
private void frmBaseChild_KeyDown(object sender, KeyEventArgs e)
{
//处理快捷键
if (e.Alt && (e.KeyCode >= Keys.A) & (e.KeyCode < Keys.Z))
{
this.DoExecuteHotKey(e);
e.Handled = true;
return;
}
}
protected virtual void DoExecuteHotKey(KeyEventArgs e)
{
if (e.Alt & (e.KeyCode == Keys.X)) this.DoClose(null);
if (e.Alt & (e.KeyCode == Keys.Y)) this.DoHelp(null);
}
private void frmBaseChild_KeyDown(object sender, KeyEventArgs e)
{
//处理快捷键
if (e.Alt && (e.KeyCode >= Keys.A) & (e.KeyCode < Keys.Z))
{
this.DoExecuteHotKey(e);
e.Handled = true;
return;
}
}
protected virtual void DoExecuteHotKey(KeyEventArgs e)
{
if (e.Alt & (e.KeyCode == Keys.X)) this.DoClose(null);
if (e.Alt & (e.KeyCode == Keys.Y)) this.DoHelp(null);
}
业务窗体重写DoExecuteHotKey方法,处理Alt+Q 键。
C# Code:
protected override void DoExecuteHotKey(KeyEventArgs e)
{
if (e.Alt && this.IsAddOrEditMode)
{
if (e.KeyCode == Keys.Q) //Alt Q - 新增明细记录
{
gvDetail.Focus();
this.CreateOneDetail(gvDetail, (int)DetailButtons.Add);//新增明细记录
gvDetail.ShowEditor();//显示输入框
}
else base.DoExecuteHotKey(e);
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
protected override void DoExecuteHotKey(KeyEventArgs e)
{
if (e.Alt && this.IsAddOrEditMode)
{
if (e.KeyCode == Keys.Q) //Alt Q - 新增明细记录
{
gvDetail.Focus();
this.CreateOneDetail(gvDetail, (int)DetailButtons.Add);//新增明细记录
gvDetail.ShowEditor();//显示输入框
}
else base.DoExecuteHotKey(e);
}
}
//来源:C/S框架网(www.csframework.com) QQ:1980854898
扫一扫加作者微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网