У вас есть две проблемы для рассмотрения. Первый довольно прост: определите, должен ли раскрывающийся список быть открыт или закрыт. Этот код может сделать это:
void comboBox1_MouseClick(object sender, MouseEventArgs e)
{
ComboBox combo = sender as ComboBox;
int left = combo.Width - (SystemInformation.HorizontalScrollBarThumbWidth + SystemInformation.HorizontalResizeBorderThickness);
if (e.X >= left)
{
// They did click the button, so let it happen.
}
else
{
// They didn't click the button, so prevent the dropdown.
}
}
Вторая проблема более важна - фактически предотвращение появления выпадающего меню. Самый простой подход:
comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
Но это позволяет вводить текст в поле, которое вам может не понадобиться.
Я потратил около 15 минут на просмотр параметров, и, похоже, чтобы предотвратить появление раскрывающегося списка и одновременно запретить пользователю вводить раскрывающийся список, необходимо создать подкласс управления. Таким образом, вы можете переопределить OnMouseClick () и вызывать base.OnMouseClick () только тогда, когда они нажимают кнопку. Это будет выглядеть примерно так (не проверено):
public class CustomComboBox : ComboBox
{
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
int left = this.Width - (SystemInformation.HorizontalScrollBarThumbWidth + SystemInformation.HorizontalResizeBorderThickness);
if (e.X >= left)
{
// They did click the button, so let it happen.
base.OnMouseClick(e);
}
else
{
// They didn't click the button, so prevent the dropdown.
// Just do nothing.
}
}
}