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

时间:2012-10-22 04:53:52

标签: c# .net winforms datagridview combobox

在winforms中,你需要点击两次组合框以正确激活它 - 第一次聚焦它,第二次实际获得下拉列表。

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

这适用于DATAGRIDVIEW组合框。

6 个答案:

答案 0 :(得分:49)

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

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

这是我的解决方案:

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

以上代码必须绑定到datagridview的CellEnter事件中。

我希望这有帮助!

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

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

edit2:现在,代码与CellEnter而不是CellClick事件相关联。

谢谢,HaraldDutch进行上述编辑

答案 1 :(得分:27)

在DataGridView上设置以下内容:

EditMode = EditOnEnter

这可能是最简单的解决方案,并且当问到这个问题时,已经为SO上的许多用户提供了解决方法。


编辑:

here执行以下操作:

设置编辑模式:

EditMode = EditOnKeystrokeOrF2

修改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;
}

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

答案 2 :(得分:2)

我只将EditMode的{​​{1}}属性更改为datagridview,并且效果非常好。

EditOnEnter

答案 3 :(得分:1)

如果您将整个网格设置为EditOnEnter,那么当您在文本列上时,可以获得一些非常时髦的活动。这是我的解决方案,应该是自我解释的。如果你不知道列名,你可以在mousemove上检查单元格类型。

Private Sub GridView_CellMouseMove(sender As Object, e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles GridView.CellMouseMove
    Select Case GridView.Columns(e.ColumnIndex).Name
        Case "Ad_Edit", "Size_Caption", "Demo_Code"
            GridView.EditMode = DataGridViewEditMode.EditOnEnter
        Case Else
            GridView.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2
    End Select
End Sub

答案 4 :(得分:0)

将组合框的DropDownStyle属性设置为DropDownList ...

答案 5 :(得分:0)

也许是旧的。但是请确保将ReadOnly属性设置为false,否则单元格将不会进入editmode,因此EditingControl返回null并强制转换DroppedDown = true NullReferencException