[英]Impossible Task On Custom DGV Set Focus To Next Control On Enter Key Press
這是我為您帶來的真正挑戰。 如果可以解決。
Datagridview上的Enter鍵是個好主意嗎? 還是這里的任何人都可以按照以下條件工作?
如果不是,那么在按Enter鍵時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();
}
}
在正常情況下,該控件工作正常,它可以將焦點放在輸入按鍵上的下一個控件上,但是如果在數據綁定模式下設置AllowUserToAddRows = false ,則該控件不起作用。 當您編輯最后一列的單元格值並按Enter鍵時,將出現確切的問題,不允許將焦點放在下一個控件上。
如何克服這個? 該如何解決呢?
通過在當前控件上添加焦點事件,我找到了一種對您有用的解決方案。 我認為這是您想要的,但無法真正理解您的問題。 讓我知道是否有所不同。 它適用於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
}
}
我看到的是僅查看代碼而不運行代碼的問題是:
用戶將轉到DataGridView中的最后一個控件,並且沒有要返回的GetNextControl控件。
您可能需要添加一些邏輯來處理這種情況。 例如,您可以將焦點設置為向導形式的“提交”或“下一步”按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.