DataGridViewComboBoxColumn没有';t第一次单击时无法打开下拉列表
本文关键字:下拉列表 单击 第一次 没有 DataGridViewComboBoxColumn | 更新日期: 2023-09-27 18:28:32
在有人将其标记为重复之前,请注意,这与此处、此处和此处提出的问题不同。
当您的DataGridView
中有两个或多个DataGridViewComboBoxColumn
,其中一个当前打开了下拉列表时,单击其他列的下拉按钮不会打开该下拉列表。相反,您仍然需要单击两次。第一次点击是隐藏已经打开的下拉列表,第二次点击实际上打开了您点击的下拉列表。
注意,当EditOnEnter
模式为ON时,需要点击两次;否则,您必须执行三次单击才能完成此操作。我也尝试过ContentClick事件,但没有任何收获。
那么,当我的网格中有多个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次(取决于您在第二个下拉列表中单击的位置)才能打开第二个列表。
这似乎对我有用:
将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这些类型的改动是不值得的,但它肯定由你来决定什么最适合你的项目。
谨致问候。