2009-05-02 21 views
6

Estoy escribiendo una aplicación C# (WinForm) con un ListBox con contenido agregado por el usuario. Ahora, podría tener un botón común debajo del ListBox para eliminar elementos, pero me gustaría tener el botón junto al contenido, por lo tanto, dentro de ListBox.C# - Botón Agregar dentro de ListBox

De esta manera:

  • Contenido 1 | X
  • Contenido 2 | X
  • ...
  • Contenido 5 | X

El problema es que no tengo experiencia en .NET, así que no tengo idea de cómo esto sería posible con todos los controles automatizados. Lo busqué en Google, pero no se obtuvieron resultados significativos.

¡Todos los consejos, pistas o fragmentos para lograr esto son bienvenidos! :)

+0

Win Forms o ASP.NET? – Canavar

+0

Y recibo una respuesta negativa por leer realmente la pregunta ...: suspiro: –

+0

@Canavar WinForms. @Deviant Downvoted? – Vectovox

Respuesta

3

Así que uno podría hacer un control personalizado, pero para mi aplicación no vale realmente la pena.

Lo que hice fue crear un DataGrid, lo hizo parecerse a un ListView pero con su propia bengala.Hice esto porque DataGrid ya tiene un botón de control incorporado en sus celdas.

Sí, lo sé, tipo de "hack" fugly, pero funciona como un encanto! :)

Apoyos a Shay Erlichmen que me llevaron a pensar por encima de mi ListBox. ¿Ves lo que hice ahí? ;)

+1

Sí, los DataGrid funcionan muy bien para esto, aunque son más complicados que un ListBox. Puede hacer que se vea como una tabla en HTML o en un estilo similar. –

0

No sé por qué querrías hacer específicamente eso? Yo pondría un botón en la parte inferior que elimine los elementos seleccionados en el cuadro de lista. Esa es la forma habitual de hacerlo a menos que desee usar jquery y poner un evento onClick en el cuadro de lista que envía una llamada para eliminar el elemento si está almacenado en una base de datos o eliminarlo de la lista de la página. .

+3

Bueno, no soy habitual y tiendo a ir por la opción más avanzada. Lo que sucede es que un botón (o botón de icono) en el lateral es más agradable a la vista y también reduce el número de clics con un clic por eliminación. – Vectovox

2

usando Sistema; usando System.Collections.Generic; usando System.Windows.Forms;

espacio de nombres WindowsFormsApplication11 { public partial class Form1: Forma { Lista _items = nueva lista();

public Form1() 
    { 
     InitializeComponent(); 

     _items.Add("One"); 
     _items.Add("Two"); 
     _items.Add("Three"); 

     listBox1.DataSource = _items; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     // The Add button was clicked. 
     _items.Add("New item " + DateTime.Now.Second); 

     // Change the DataSource. 
     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     // The Remove button was clicked. 
     int selectedIndex = listBox1.SelectedIndex; 

     try 
     { 
      // Remove the item in the List. 
      _items.RemoveAt(selectedIndex); 
     } 
     catch 
     { 
     } 

     listBox1.DataSource = null; 
     listBox1.DataSource = _items; 
    } 
} 

}

private void Button1_Click (remitente del objeto, EventArgs e) { // se hace clic en el botón Añadir. // ...

button2.Enabled = true; 

}

privada vacío Button2_Click (object sender, EventArgs e) { // se hace clic en el botón Quitar. // ....

if (listBox1.Items.Count == 0) 
{ 
    button2.Enabled = false; 
} 

}

+0

Debería leer la pregunta mejor;) –

+0

Sí, no creo que haya leído mi pregunta muy completa :) – Vectovox

+0

@Alb La pregunta dice que "por lo tanto, estar dentro del ListBox". De todos modos, esta técnica de listbox.datasource = list es mucho más compacta que clear, add. Entonces, la respuesta vale la pena. – prabhakaran

6

En lugar de ListBox puede utilizar ListView, ListView tiene la ability to add custom column types.

+0

ListBox y ListView están separados por millas. Tal vez debería usar un control de árbol como medida –

+1

ListView en modo de informe sin los encabezados con selección de fila completa y las líneas de cuadrícula no se ven y se comportan igual que ListBox. Es más fácil agregar botones (o cualquier otro control para ese asunto) como un elemento secundario, mejor que tratar de crear un control personalizado. –

Cuestiones relacionadas