DataGridViewComboBoxColumn在第一次单击时不会打开下拉列表
在任何人将此标记为重复之前,请注意这与此处和此处提出的问题不同。
如果DataGridViewComboBoxColumn
有两个或更多DataGridViewComboBoxColumn
,其中一个下拉列表当前处于打开状态,则单击其他列的下拉按钮不会打开该下拉列表。 相反,你仍然需要点击两次。 首次单击会隐藏已打开的下拉列表,第二次单击实际上会打开您单击的下拉列表。
请注意,当EditOnEnter
模式为ON时,需要两次单击; 否则你必须执行三次点击才能完成这项工作。 我也尝试了ContentClick事件,没有任何好处。
那么当我的DataGridViewComboBoxColumn
中有多个DataGridViewComboBoxColumn
时,如何使用一键操作?
更新
以防万一有人想要重现它,这是一个过程:
- 创建一个新的WinForms C#项目。
-
转到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);
-
运行该项目。 单击第一个下拉列表,然后单击另一个下拉列表而不关闭第一个下拉列表。 它将需要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。