DataGridViewComboBoxColumn在第一次单击时不会打开下拉列表

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

如果DataGridViewComboBoxColumn有两个或更多DataGridViewComboBoxColumn ,其中一个下拉列表当前处于打开状态,则单击其他列的下拉按钮不会打开该下拉列表。 相反,你仍然需要点击两次。 首次单击会隐藏已打开的下拉列表,第二次单击实际上会打开您单击的下拉列表。

请注意,当EditOnEnter模式为ON时,需要两次单击; 否则你必须执行三次点击才能完成这项工作。 我也尝试了ContentClick事件,没有任何好处。

那么当我的DataGridViewComboBoxColumn中有多个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次点击(取决于您在第二个下拉列表中单击的位置)才能打开第二个列表。

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

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

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

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

有几种解决方法可以改善这种行为。 看看这个MSDN 讨论 。 恕我直言这些类型的改动是不值得的,但你必须决定什么最适合你的项目。

最好的祝福。

这似乎对我有用:

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 - eX < SystemInformation.VerticalScrollBarWidth ) ec.DroppedDown = true; } 

关闭一个掉落的combobox仍然会吃一个moseclick,但就是它应该如何,imo。