Увеличение ширины выпадающего списка ComboBox
Увеличение ширины выпадающего списка ComboBox
Выпадающий список у комбинированного окна равен ширине самого комбинированного окна ComboBox. Но можно обойти это ограничение с помощью неуправляемого кода, как показано в листинге 4.4.
Листинг 4.4
/// <summary>
/// Сообщение, получающее размеры выпадающего списка
/// комбинированного окна
/// </summary>
const int CB_GETDROPPEDWIDTH = 0x015f;
/// <summary>
/// Сообщение, устанавливающее размеры выпадающего списка
/// комбинированного окна
/// </summary>
const int CB_SETDROPPEDWIDTH = 0x0160;
[DllImport("coredll.dll")]
static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);
private void Form1_Load(object sender, EventArgs e) {
comboBox1.Items.Add("Раз");
comboBox1.Items.Add("Два");
comboBox1.Items.Add("Три");
comboBox2.Items.Add("Длинный текст");
comboBox2.Items.Add("Очень длинный текст");
comboBox2.Items.Add("Hy очень длинный текст");
// Устанавливаем желаемую ширину
SendMessage(comboBox2.Handle, CB_SETDROPPEDWIDTH, 200, 0);
// Получим ширину выпадающего окна
int retval = SendMessage(comboBox2.Handle, CB_GETDROPPEDWIDTH, 0, 0);
this.Text = retval.ToString();
}
На форме надо разместить два элемента ComboBox. Один из них будет стандартным. А второй элемент обработает сообщение CB_SETDROPPEDWIDTH со значением второго параметра 200. В результате выпадающий список будет в ширину занимать 200 пикселов.
После запуска программы сначала надо обратить внимание на работу первого комбинированного окна (рис. 4.4). Оно ведет себя стандартным образом.
Рис. 4.4. Стандартный размер выпадающего списка
Теперь нужно перейти ко второму комбинированному окну. У него размер выпадающего списка увеличился, что позволяет увидеть весь текст (рис. 4.5).
Рис. 4.5. Увеличенный размер выпадающего списка у ComboBox