visual usar net eventos ejemplos como cambiado c# .net winforms combobox

c# - usar - El propietario de tamaño variable dibuja ComboBox; lista no dimensionando correctamente



eventos de un combobox en vba (3)

Obtuve una clase de ComboBox, la convertí en un cuadro de lista dibujado por el propietario (estilo DrawMode.OwnerDrawVariable) y al anular OnMeasureItem y OnDrawItem agregué elementos especiales a la lista desplegable (separadores, por ejemplo) que son de un tamaño menor o mayor tamaño que los elementos normales que habitan en el control.

Ahora bien, el problema que estoy teniendo y que parece que no puede remediar eficazmente es el tamaño de la lista desplegable: hay un espacio vacío feo al final de la lista cuando se cae. Pensé que había abordado esto estableciendo la propiedad DropDownHeight del ComboBox en la suma de la altura de todos los elementos, pero esto no parece funcionar todo el tiempo. A veces, en un número aleatorio de elementos, vuelve el espacio en blanco vacío de Doom. Este es un problema inusual, pero con suerte uno común y fácil de arreglar.

¿Cómo puedo hacer que la lista desplegable de ComboBox tenga el tamaño exacto al tamaño ocupado por los elementos dentro de ella?


Estoy viendo un error muy tonto en el método ComboBox.UpdateDropDownHeight (). Cuando la propiedad DropDownHeight coincide con el valor predeterminado, calcula una altura personalizada para ajustar el menú desplegable a la cantidad de elementos. Hace esto incluso cuando cambiaste el DrawMode, eso está completamente equivocado.

La solución alternativa:

int height = ...; // Your code here if (height == 106) ++height; comboBox1.DropDownHeight = height;

Obtendrá un espacio de un píxel, debería poder ocultarlo en su sobrecarga OnDrawItem ().


Supongo que el problema en la forma en que estás calculando la altura de tu lista desplegable, supongo que es así:

comboBox.DropDownHeight = N_of_items * item_height;

la altura total de la lista desplegable también debe incluir su altura de borde superior e inferior, por lo que si hiciera algo así:

comboBox.DropDownHeight = N_of_items * item_height + SystemInformation.BorderSize.Height*2;

debe hacer el truco y mostrar la lista desplegable sin áreas blancas

espero que esto ayude, saludos


Pasé mucho tiempo luchando con este mismo problema.

Cuando agrega elementos personalizados al cuadro combinado, DropDownHeight no se configurará correctamente. Para garantizar que lo configures bien todo el tiempo, debes secuestrar un mensaje de Windows.

Esta publicación muestra cómo. Simplemente haga un seguimiento de la altura de todos los artículos (estándar y personalizados) en su cuadro combinado, y luego configure la altura total de la porción desplegable como se muestra en el ejemplo.