C# 单击即可打开下拉列表(在datagrid视图中)项

C# 单击即可打开下拉列表(在datagrid视图中)项,c#,winforms,datagridview,datagridviewcomboboxcell,C#,Winforms,Datagridview,Datagridviewcomboboxcell,如何避免双击DataGridView中使用的下拉按钮?现在,我可以通过单击两次或多次来查看DataGridView中的下拉项。第一次选择单元格,第二次单击下拉按钮箭头时,显示列表。如何在一次单击中实现相同的功能?您可以通过订阅网格的编辑控件Showing事件并在其中订阅类型为组合框的控件来实现此功能 ComboBox ctl = e.Control as ComboBox; ctl.Enter -= new EventHandler(ctl_Enter); ctl.Enter += new Ev

如何避免双击
DataGridView中使用的
下拉按钮
?现在,我可以通过单击两次或多次来查看
DataGridView
中的下拉项。第一次选择单元格,第二次单击
下拉按钮
箭头时,显示列表。如何在一次单击中实现相同的功能?

您可以通过订阅网格的
编辑控件Showing
事件并在其中订阅类型为
组合框的控件来实现此功能

ComboBox ctl = e.Control as ComboBox;
ctl.Enter -= new EventHandler(ctl_Enter);
ctl.Enter += new EventHandler(ctl_Enter);
在Enter事件中,使用属性

void ctl_Enter(object sender, EventArgs e)
{
    (sender as ComboBox).DroppedDown = true;
}

DroppedDown指示是否显示下拉区域,因此无论何时输入控件,都会将其设置为true并显示项目,而无需进一步单击。

DataGridView
属性设置为
Editonner

DataGridView.EditMode
-获取或设置一个值,该值指示如何开始编辑单元格

editonener
-当单元格接收到焦点时,编辑开始

“将DataGridView的EditMode属性设置为Editonner”对我来说很有效,但我发现了另一个问题:用户不能通过选择并按DEL键来删除一行。所以,谷歌搜索给了我另一种方法。只需捕获事件CellEnter并检查该单元格是否为执行适当操作的适当类型,如以下示例代码所示:

private void Form_OnLoad(object sender, EventArgs e){
    dgvArmazem.CellEnter += new DataGridViewCellEventHandler(dgvArmazem_CellEnter);
}

void dgvArmazem_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            DataGridView dg = (DataGridView)sender;

            if (dg.CurrentCell.EditType == typeof(DataGridViewComboBoxEditingControl))
            {
                SendKeys.Send("{F4}");
            }
        }
现在,组合框下降得更快,用户仍然可以通过选择一行并按DEL键来删除一行


就这样。

你能详细说明一下你想要什么吗achieve@V4Vendetta,我已经更新了描述。请检查。您可能想检查我需要在单击datagrid单元格本身时显示dropitems。这没有什么区别。你能设置DataGridView EditMode=
DataGridViewEditMode.Editonner
吗?我只设置了EditMode=Editonner属性,现在可以了。谢谢。在这个对话框中,当你点击DataGridView的灰色区域时,代码会打开下拉列表。这是我不想要的行为,所以我使用了这个(使用CellEnterEvent触发下拉列表):这不是此问题的有效答案,因为DataGridViewComboxCell控件没有Enter事件。我经历了一个有趣的行为-第一次单击会展开dropbox,选择第一项,并立即关闭dropbox。我需要再次单击才能真正进行选择。