这是我为您带来的真正挑战。如果可以,请解决它。
在Datagridview上输入密钥这是好主意吗?或者这里的任何人都可以按照以下条件进行操作吗?
如果输入键不是Datagridview Control无效,请按
我有以下自定义DGV:
public class MyDataGridView : DataGridView
{
protected override bool ProcessDialogKey(Keys keyData)
{
Keys key = (keyData & Keys.KeyCode);
if (key == Keys.Enter)
{
Tab(keyData);
return true;
}
return base.ProcessDialogKey(keyData);
}
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Tab(e.KeyData);
return true;
}
return base.ProcessDataGridViewKey(e);
}
private void Tab(Keys KeyData)
{
Point cca = CurrentCellAddress;
bool Forward = ((KeyData & Keys.Shift) != Keys.Shift);
if (Forward)
if (cca.Y == Rows.Count - 1) // last row?
if (cca.X == Columns.Count - 1) // last column?
ToNextControl(Forward);
else
ProcessTabKey(KeyData);
else
ProcessTabKey(KeyData);
else
if (cca.Y == 0) // first row?
if (cca.X == 0) // first column?
ToNextControl(Forward);
else
ProcessTabKey(KeyData);
else
ProcessTabKey(KeyData);
}
/// <summary>
/// Go to the next control, forward or backword. This does not support
/// wrapping from the first to the last or the last to the first.
/// </summary>
/// <param name="Forward">Whether to go forward</param>
private void ToNextControl(bool Forward)
{
Control c = Parent.GetNextControl(this, Forward);
while (c != null && !c.TabStop) // get next control that is a tabstop
c = Parent.GetNextControl(c, Forward);
if (c != null)
c.Select();
}
}
同样正常工作正常它允许在enter keypress上关注下一个控件但如果你在数据绑定模式下设置 AllowUserToAddRows = false 则它不起作用。编辑最后一列的单元格值时会产生确切的问题,按Enter键不允许将焦点设置在下一个控件上。
如何克服这个?如何解决这个问题?
答案 0 :(得分:1)
通过在当前控件上添加焦点事件,我找到了一个适合您的解决方案。我想这就是你想要的,但却无法理解你的问题。如果它有所不同,请告诉我。它适用于AllowUserToAddRows = false
或true
。
private void ToNextControl(bool Forward)
{
Control c = Parent.GetNextControl(this, Forward);
while (c != null && !c.TabStop) // get next control that is a tabstop
c = Parent.GetNextControl(c, Forward);
if (c != null)
{
//c.Select(); // Not needed for it to work
c.Focus(); // force it to focus
}
}
答案 1 :(得分:0)
我看到的问题只是查看代码而不运行它是:
用户到达DataGridView中的最后一个控件,并且无法控制GetNextControl返回。
你可能想要添加一些逻辑来处理这种情况。例如,如果是向导形式,则可以将焦点设置在提交或下一个按钮上。