Pregunta

¿Soy yo o solo puedo establecer la altura del elemento, e.ItemHeight, una vez para un cuadro de lista?

Aunque manejo el MeasureItemEvent en mi cuadro de lista dibujado por el propietario y establezco e.ItemHeight en el valor correcto, solo se utilizará la primera altura establecida.

Vaya, soy nuevo en esto, lo siento por eso. Este es el código (DrawItemHandler, por supuesto, está en el programa real):

// Add eventhandler to draw and measure items
this.listBox1.DrawItem += new DrawItemEventHandler(this.DrawItemHandler);
this.listBox1.MeasureItem += new MeasureItemEventHandler(this.MeasureItemHandler);

// The eventhandler itself
private void MeasureItemHandler(object sender, MeasureItemEventArgs e)
{
    e.ItemHeight = Convert.ToInt32(mySettings.iCurrentSizeFactor * 10) + 1;
}
¿Fue útil?

Solución

e.ItemHeight se inicializa en ListBox.ItemHeight en la activación del evento. No guarda su valor establecido previamente. Debe modificar ListBox.ItemHeight , o realizar un seguimiento de sus modificaciones en una variable.


EDITAR: (siguiendo el comentario)

El evento se dispara cuando se agrega un nuevo elemento y solo para ese elemento. También se activa para todos los elementos cuando llama a ListBox.Refresh () .

Según entiendo su código, debe aumentar / disminuir ItemHeight para todos sus artículos a la vez.

- > Creo que debe llamar a ListBox.Refresh cuando actualice TrackBar.


EDITAR 2:

En la práctica, la altura de los elementos cambia cuando ListBox recibe WM_MEASUREITEM que solo ocurre cuando se crea por primera vez o cuando se agrega un elemento. Después de la creación de ListBox y todos sus elementos en la inicialización, los cambios adicionales dentro de listBox1_MeasureItem para los elementos existentes debido a una actualización son inútiles (visto con la ayuda de Reflector).

Encontré una manera de forzar un WM_MEASUREITEM para que se envíe al ListBox sin eliminar y agregar todos los elementos:

In place of ListBox.Refresh(), put:

ListBox.DrawMode = DrawMode.Normal;
ListBox.DrawMode = DrawMode.OwnerDrawVariable;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top