在有人将此标记为重复之前,请注意这与提出的问题here,here和here不同。
如果DataGridViewComboBoxColumn
中有两个或多个DataGridView
,其中一个的下拉列表当前处于打开状态,则点击其他列的下拉按钮不会打开该下拉菜单。相反,你仍然需要点击两次。隐藏已打开的下拉列表会消耗第一次点击,第二次点击实际上会打开您单击的下拉列表。
注意EditOnEnter
模式为ON时需要两次点击;否则,您必须执行三次点击才能完成此操作。我也尝试过ContentClick事件,没有任何好处。
那么当我的网格中有多个DataGridViewComboBoxColumn
时,如何使用一键操作?
以防万一有人想要重现它,这是一个过程:
转到Form1&#39>代码并将其粘贴到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次点击(取决于您在第二个下拉列表中单击的位置)才能打开第二个列表。
答案 0 :(得分:1)
您的代码没有任何问题。这是.NET DataGridView控件的设计行为。
如果单击下拉控件右侧的按钮(指向下箭头)而不是文本区域,则会立即显示下拉列表 - 1单击。
如果您点击下拉控件的文本区域,将首先获得焦点,然后显示下拉列表 - 2次点击。
如果此时另一个下拉列表已展开,则需要额外点击才能将其折叠 - 这将是 3次点击。
有一些解决方法可以改善这种行为。看一下这个MSDN discussion。 恕我直言,这些改动是不值得的,但是由你来决定最适合你项目的是什么。
最诚挚的问候。
答案 1 :(得分:0)
这似乎对我有用:
将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;
}
关闭一个掉落的组合框仍然会吃一个moseclick,但就是它应该如何,imo。