Допустим, у меня есть DataGridView, в котором я динамически создаю столбец ComboBox и добавляю к нему значения. Каков наилучший подход к отлову, когда пользователь нажимает кнопку раскрывающегося списка, чтобы отобразить раскрывающийся список? Если я просто использую CellClick для DataGridView, я получаю это событие, даже если пользователь фактически не нажимает кнопку раскрывающегося списка.
Пока что то, что я сделал, в основном унаследовано от DataGridViewComboBoxCell и переопределило свойство DropDownWidthProperty. В геттере я запускаю событие DropDown. Это работает, но чувствует себя очень "взломанным". Любые другие предложения?
using System;
using System.Windows.Forms;
public class DataGridViewEventComboBoxCell : DataGridViewComboBoxCell
{
private bool dropDownShown = false;
public event EventHandler BeforeDropDownShown;
private void OnBeforeDropDownShown()
{
if (this.BeforeDropDownShown != null)
{
this.BeforeDropDownShown(this, new EventArgs());
}
}
public override int DropDownWidth
{
get
{
if (!dropDownShown) //this boolean is here because I only need to trap it the very first time
{
this.OnBeforeDropDownShown();
dropDownShown = true;
}
return base.DropDownWidth;
}
set
{
base.DropDownWidth = value;
}
}
}