Hello, I think this can be done by intercepting WM_COMMAND message in "WndProc" method. this may help
public class SuperComboBox:ComboBox
{
public class DropDownValidate:EventArgs
{
public bool AllowDropDown{get;set;}
public DropDownValidate()
{
this.AllowDropDown = true;
}
}
private const int WM\_COMMAND = 0x0111;
public event EventHandler<DropDownValidate> ValidateOnDropDown;
private bool \_haltDrop;
protected virtual void OnValidateDropDown(DropDownValidate e)
{
if (this.ValidateOnDropDown != null)
this.ValidateOnDropDown(this, e);
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM\_COMMAND)
{
var validationArg = new DropDownValidate();
this.OnValidateDropDown(validationArg);
\_haltDrop = !validationArg.AllowDropDown;
if (\_haltDrop) return;
}
base.WndProc(ref m);
}
}
Good luck