在winforms中,您需要单击组合框两次以正确激活它 - 第一次聚焦它,第二次实际获取下拉列表.
如何更改此行为以便在第一次单击时激活?
这适用于DATAGRIDVIEW组合框.
任何人都标志着这是重复之前,PLZ注意,这是不一样的问题问在这里,这里和这里.
如果您有两个或更多个DataGridViewComboBoxColumn,DataGridView并且其中一个的下拉列表当前处于打开状态,则单击其他列的下拉按钮不会打开该下拉列表.相反,你仍然需要点击两次.首次单击会隐藏已打开的下拉列表,第二次单击实际上会打开您单击的下拉列表.
请注意,EditOnEnter模式为ON 时需要两次单击; 否则你必须执行三次点击才能完成这项工作.我也尝试过ContentClick事件,没有任何好处.
那么当DataGridViewComboBoxColumn我的网格中有多个操作时,如何使用一键操作?
以防万一有人想要重现它,这是一个过程:
转到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);
Run Code Online (Sandbox Code Playgroud)运行该项目.单击第一个下拉列表,然后单击另一个下拉列表而不关闭第一个下拉列表.它将需要2或3次点击(取决于您在第二个下拉列表中单击的位置)才能打开第二个列表.
在我将"EditOnEnter"设置为true后,DataGridViewComboBoxCell如果我没有单击组合框的向下箭头部分,仍然需要两次单击才能打开.
任何人都有任何线索如何解决这个问题?我有自己的DataGridView课程,所以我可以通过一些智能事件处理程序轻松解决系统问题.
谢谢.
我有一个带有一些DataGridViewComboBoxColumns的DataGridView.DataGridView上有一个CellEnter事件处理程序,用于单击下拉组合框.
该列绑定到KeyValuePairs列表,ValueMember为"Key",DisplayMember为"Value".
当我点击组合框列时,它工作正常.但是,如果单元格处于"下拉"状态并且我单击另一个组合框(相同的列,不同的行),它会正确地取消选择旧单元格,选择并下拉新单元格,但是顶部的选定值会更改为在更改回正确的值之前,从旧单元格中获取值一瞬间.
例如,假设列表是A,B,C.在row1中,选择A,在row2中选择B. 我单击row1中的单元格,一切都是应该的.然后,当这个单元格下拉时,我点击第2行中的单元格.它正确地下降,但顶部的选定值变为A,然后立即切换回B(正确的值).
如果在单击第二个组合框单元格之前单击其他列中的单元格,则不会发生这种情况.
有没有办法防止这种情况发生?
重现问题的示例代码(事件处理程序连接到明显的事件):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace PDGV
{
public partial class Form1 : Form
{
List<KeyValuePair<string, string>> bindingList = new List<KeyValuePair<string, string>>();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.Rows.Add(10);
bindingList.Add(new KeyValuePair<string,string>("aaa", "111"));
bindingList.Add(new KeyValuePair<string,string>("bbb", "222"));
bindingList.Add(new KeyValuePair<string,string>("ccc", "333"));
bindingList.Add(new KeyValuePair<string,string>("ddd", "444"));
bindingList.Add(new KeyValuePair<string,string>("eee", "555"));
BindComboList(2, bindingList);
}
private void BindComboList(int columnIndex, object list)
{
var …Run Code Online (Sandbox Code Playgroud) 可能重复:
单击一次打开下拉列表(在数据网格视图中)
我们有一个DataGridView,其中一列是具有DropDownButton样式的ComboBox.DataGridView处于FullRowSelect模式.假设我有5行,并在DataGridView中选择了行0.
我想从-say的ComboBox中选择一个项目例如第2行,因此我单击ComboBox的小箭头.当我这样做时,首先,选择DataGridView的第2行.ComboBox尚未打开.只有第二次单击才能打开ComboBox.
事实上,它过去需要3次点击,但后来我们重载了CellMouseDown来做:
myDataGridView.ClearSelection();
myDataGridView.Rows[e.RowIndex].Selected = true;
Run Code Online (Sandbox Code Playgroud)
有了这个,我们只有2次点击.有没有办法只显示一次单击显示ComboBox项目?
编辑:我还应该提一下,如果我单击ComboBox本身,而不是单击ComboBox的小箭头,只需3次单击即可显示ComboBox项目!
datagridview datagridviewcolumn datagridviewcombobox datagridviewcomboboxcell