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

时间:2018-09-29 11:57:00

标签: c# winforms datagridview datagridviewcomboboxcell

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

enter image description here

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

2 个答案:

答案 0 :(得分:1)

要检测鼠标是否在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);
}

您可以查看DataGridViewComboBoxCell中的source code,以了解有关如何计算下拉按钮边界的更多信息。

答案 1 :(得分:0)

您可以使用EditingControlShowing事件:

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

   }
}