如何区分DataGridViewComboBoxColumn单元格点击事件

How to Differentiate DataGridViewComboBoxColumn Cell Click Events

我有一个 DataGridViewComboBoxColumn,它在单击单元格时触发一个事件,最终显示一个对话框。这很好用,但我的问题是我希望仅在用户未单击箭头以显示下拉列表时触发。现在,单击文本和单击此箭头之间没有区别。我该如何区分? (我知道 CellContentClick 事件,但这可能需要大量的点击才能真正触发。)

(在我令人惊叹的插图中,我希望绿色触发事件,而红色仅具有其正常功能。)

您可以使用 EditingControlShowing 事件:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e){
    if (e.Control.GetType() == typeof(DataGridViewComboBoxEditingControl)){
        //The green is clicked

   }
}

检测DataGridViewComboBoxCell中的下拉按钮区域是否有鼠标点击,可以使用如下代码:

private void productsDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
    var field = typeof(DataGridViewComboBoxCell).GetField("mouseInDropDownButtonBounds",
        System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
    var mouseInDropDownButtonBounds = field.GetValue(null);
}

您可以查看 DataGridViewComboBoxCellsource code 以详细了解它如何计算下拉按钮绑定。