如何在第一次单击时激活组合框(Datagridview)

l46*_*kok 34 .net c# combobox datagridview winforms

在winforms中,您需要单击组合框两次以正确激活它 - 第一次聚焦它,第二次实际获取下拉列表.

如何更改此行为以便在第一次单击时激活?

这适用于DATAGRIDVIEW组合框.

Jef*_*ick 54

我意识到这是一个老问题,但我想我会向那些可能需要能够做到这一点的人提供我的解决方案.

虽然我找不到任何答案来做到这一点......我确实找到了一个帮助我的另一个问题的答案.

这是我的解决方案:

private void datagridview_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        bool validClick = (e.RowIndex != -1 && e.ColumnIndex != -1); //Make sure the clicked row/column is valid.
        var datagridview = sender as DataGridView;

        // Check to make sure the cell clicked is the cell containing the combobox 
        if(datagridview.Columns[e.ColumnIndex] is DataGridViewComboBoxColumn && validClick)
        {
            datagridview.BeginEdit(true);
            ((ComboBox)datagridview.EditingControl).DroppedDown = true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码必须绑定到datagridview的CellEnter事件.

我希望这有帮助!

编辑:添加列索引检查以防止在选择整行时崩溃.

谢谢,Up Up Night进行上述编辑

edit2:现在代码绑定到CellEnter而不是CellClick事件.

谢谢,HaraldDutch为上述编辑

  • 这有很大帮助,在我看来,这是获得它的正确方法.`gridView.EditMode = DataGridViewEditMode.EditOnEnter`仅在点击箭头时打开下拉列表. (6认同)
  • 如果您使用键盘浏览单元格,这不起作用.使用事件CellEnter而不是cell cick (3认同)

Kre*_*epN 28

在DataGridView上设置以下内容:

EditMode = EditOnEnter
Run Code Online (Sandbox Code Playgroud)

这可能是最简单的解决方案,已经在这里了许多用户的解决办法上,所以当这个问题被问.


编辑:

此处执行以下操作:

设置Editmode:

EditMode = EditOnKeystrokeOrF2
Run Code Online (Sandbox Code Playgroud)

修改datagridview上的EditingControlShowing事件:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox ctl = e.Control as ComboBox;
    ctl.Enter -= new EventHandler(ctl_Enter);
    ctl.Enter += new EventHandler(ctl_Enter);

}

void ctl_Enter(object sender, EventArgs e)
{
    (sender as ComboBox).DroppedDown = true;
}
Run Code Online (Sandbox Code Playgroud)

这将为您提供所需的结果.如果不这样做,请告诉我.

  • 如果你点击箭头就可以了.我希望在单击整个单元格时发生此行为(IE:Text Part) (2认同)

小智 5

我只改变了toEditMode的属性,它工作得很好。datagridviewEditOnEnter

EditMode  = EditOnEnter
Run Code Online (Sandbox Code Playgroud)