如何在C#中禁用DataGridView的每个单元格制表位?

如何在C#中禁用DataGridView的每个单元格制表位?,c#,datagridview,tabs,C#,Datagridview,Tabs,如何在C#中禁用DataGridView的每个单元格制表位 如果用户关注DataGridView并按下“Tab”,我希望下一个控件将被关注,而不是关注DataGridView的下一个单元格 我该怎么做呢?使allowUserToAddress=false然后 private void ToNextControl(bool Forward) { Control c = Parent.GetNextControl(this, Forward); while (c !

如何在C#中禁用DataGridView的每个单元格制表位

如果用户关注DataGridView并按下“Tab”,我希望下一个控件将被关注,而不是关注DataGridView的下一个单元格


我该怎么做呢?

使
allowUserToAddress=false
然后

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

这将使下一个控件获得焦点:

private void DataGridView1_KeyDown(object sender, KeyEventArgs e)
{
   if (e.KeyCode == Keys.Tab)
   {
       DataGridView1.Enabled = false;
       DataGridView1.GetNextControl(DataGridView1, true).Focus();
       DataGridView1.Enabled = true;
       e.Handled = true;
   }
}
使用键控键时,datagridview在放弃焦点之前仍会进一步移动一个单元格。如果要撤消,可以添加以下代码行:

DataGridView1.CurrentCell = DataGridView1.Rows[DataGridView1.CurrentCell.RowIndex].Cells[DataGridView1.CurrentCell.ColumnIndex - 1];
DataGridView1.Enabled = false;
DataGridView.GetNextControl(DataGridView1, true).Focus();
DataGridView1.Enabled = true;

DataGridView.StandardTab
属性设置为
true

以下是该属性的说明:

“指示TAB键是否将焦点移动到TAB顺序中的下一个控件,而不是将焦点移动到控件中的下一个单元格。”

在VS2012.NET 4中,在向表单添加新的datagridview后,默认情况下这是
false
(在文档中没有看到默认状态)


我建议在搜索问题的解决方案时,在google中键入对象和所需功能,然后键入空格和文本msdn。这解决了我40%的困境。如果不起作用,用stackoverflow替换msdn。这又解决了50%的问题。最后10%是休息一下然后再回来的结果。

请注意,Ctrl+Tab将移动到下一个控件。将KeyUp事件更改为KeyDown事件对我来说很有用。否则,用户无法通过按“Tab”键关注DataGridView。你能修改按键事件的答案吗?此外,它不会将焦点移动到下一个单元格,所以我不需要添加“撤消”代码。非常感谢你!这怎么不是正确的、有标记的答案呢?虽然标记的答案是正确的,并且完成了所要求的内容,但StandardTab是正确的答案和正确的方式。