2010-12-24 17 views
9

He decidido que me gustaría tener una lista con "contexto complejo", es decir, de controles personalizados. (El objetivo es algo que parece una lista de amigos, con fotos, iconos de estado, texto y "botón de inicio de sesión").Crear lista de controles en Windows.Forms

Pero me gusta que se comporte como una lista: barras de desplazamiento, posibilidad de seleccionar múltiples elementos, etc.

Cuando he estado viendo ListView y ListBox solo veo que puedo agregar texto y un icono, pero no controles arbitrarios. Me estoy perdiendo cómo se hace esto?

¿O debería usar algo más que ListView/ListBox?

+2

¿por qué no probar WPF en lugar de Winforms? –

+1

@ Dean Chalk: estoy agregando una función a una aplicación existente. Que es Windows.Forms. – leiflundgren

+1

Sin mencionar "intentar" WPF incurriría en una curva de aprendizaje empinada si todavía no tienes experiencia en ello. –

Respuesta

4

Hay un control oculto en los Power Pack de Visual Basic llamado the Data Repeater.

Esto le permite asociar sus propios controles con un contenedor de datos que se convierte en un elemento en el repetidor.

lo he usado una vez antes, y yo creo que no es del todo intuitivo, pero una vez que tenga su cabeza alrededor de ella, puede ser bastante útil. También le ahorra rodar su propio control.

Actualmente, es lo más parecido a la idea de un control de repetición arbitrario en Windows Forms que he encontrado hasta ahora.

3

Esto sería bastante trivial para crear en WPF (mientras que va a ser mucho trabajo en Windows Forms) - WPF está diseñado para crear controles de interfaz de usuario tan ricos. Si el resto de su aplicación está en Windows Forms, puede alojar WPF control in Windows Forms.

+1

También es trivial en WinForms, hay un control disponible para hacerlo en los Power Packs de Visual Basic llamado Data Repeater. Estoy de acuerdo en que comenzar de cero en WinForms es, sin embargo, no trivial. –

7

Utilice un FlowLayoutPanel. Si desea que los controles dispuestos verticalmente, con desplazamiento, hacer:

myFlowLayoutPanel.AutoScroll = true; 
myFlowLayoutPanel.FlowDirection = FlowDirection.TopDown; 
myFlowLayoutPanel.WrapContents = false; // Vertical rather than horizontal scrolling 
foreach(Control myControl in myControls){ 
    myFlowLayoutPanel.Controls.Add(myControl); 
} 

Asegúrese de que el panel es lo suficientemente grande como para contener los controles y la barra de desplazamiento. No estoy seguro acerca de su requisito de selección.

+0

Gracias, hombre, esto es exactamente lo que necesitaba. – Bertie92

Cuestiones relacionadas