DataGridViewComboBoxColumn没有';t第一次单击时无法打开下拉列表

本文关键字:下拉列表 单击 第一次 没有 DataGridViewComboBoxColumn | 更新日期: 2023-09-27 18:28:32

在有人将其标记为重复之前,请注意,这与此处、此处和此处提出的问题不同。

当您的DataGridView中有两个或多个DataGridViewComboBoxColumn,其中一个当前打开了下拉列表时,单击其他列的下拉按钮不会打开该下拉列表。相反,您仍然需要单击两次。第一次点击是隐藏已经打开的下拉列表,第二次点击实际上打开了您点击的下拉列表。

注意,当EditOnEnter模式为ON时,需要点击两次;否则,您必须执行三次单击才能完成此操作。我也尝试过ContentClick事件,但没有任何收获。

那么,当我的网格中有多个DataGridViewComboBoxColumn时,我如何使用一键操作呢?

更新

万一有人想复制它,下面是流程:

  1. 创建一个新的WinForms C#项目
  2. 转到Form1的代码,并将其粘贴到InitializeComponent行之后的构造函数中:

    DataGridView dgv = new DataGridView();
    DataGridViewComboBoxColumn col1 = new DataGridViewComboBoxColumn();
    DataGridViewComboBoxColumn col2 = new DataGridViewComboBoxColumn();
    dgv.Columns.AddRange(new DataGridViewColumn[] { col1, col2 });
    dgv.Dock = DockStyle.Fill;
    dgv.EditMode = DataGridViewEditMode.EditOnEnter;
    col1.Items.AddRange(new object[] { "Cat", "Dog", "Elephant", "Lion" });
    col2.Items.AddRange(new object[] { "Duck", "Hen", "Crow", "Sparrow" });
    this.Controls.Add(dgv);
    
  3. 运行项目。单击第一个下拉列表,然后单击另一个下拉列表而不关闭第一个。需要单击2或3次(取决于您在第二个下拉列表中单击的位置)才能打开第二个列表。

DataGridViewComboBoxColumn没有';t第一次单击时无法打开下拉列表

这似乎对我有用:

EditMode设置为EditProgramatically

CellMouseClick事件进行编码:

private void dgv_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    // maybe do a column type check before..!?
    dgv.BeginEdit(false);
    var ec = dgv.EditingControl as DataGridViewComboBoxEditingControl;
    if (ec != null && ec.Width - e.X < SystemInformation.VerticalScrollBarWidth ) 
       ec.DroppedDown = true;
}

关闭一个掉落的combobox仍然会吃掉一个moseclick,但它应该是这样的

您的代码没有任何问题。这是为.NET DataGridView控件设计的行为。

如果单击下拉控件右侧的按钮(向下箭头),而不是文本区域,则下拉列表将立即显示-单击1次。

如果您单击下拉控件的文本区域,If将首先获得焦点,然后显示下拉列表-单击2次。

如果此时展开另一个下拉列表,则需要额外单击一次才能将其折叠,即单击3次

有几个解决方法可以改善这种行为。看看MSDN的讨论。IMHO这些类型的改动是不值得的,但它肯定由你来决定什么最适合你的项目。

谨致问候。