2009-05-02 15 views
6

Piszę aplikację C# (WinForm) z ListBox o treści dodane przez użytkownika. Teraz mógłbym mieć zwykły przycisk pod ListBoxem, aby usunąć elementy, ale chciałbym mieć przycisk tuż obok zawartości, a tym samym być wewnątrz ListBox.C# - Dodawanie przycisku wewnątrz ListBox

Jak to:

  • Treść 1 | X
  • Treść 2 | X
  • ...
  • Treść 5 | X

Problem polega na tym, że brakuje mi doświadczenia w .NET, więc nie mam pojęcia, jak to będzie możliwe przy wszystkich kontrolowanych urządzeniach automatycznych. Mam googleed, ale przyszedł bez znaczących wyników.

Wszelkie wskazówki, wskazówki i opisy do osiągnięcia tego są mile widziane! :)

+0

Win Forms lub ASP.NET? – Canavar

+0

Cofnięto mnie za przeczytanie pytania ....: westchnienie: –

+0

@ Winner WinForm. @ Dewelant potrącono? – Vectovox

Odpowiedz

3

Tak więc można wykonać niestandardową kontrolę, ale dla mojej aplikacji nie jest to warte problemów.

To, co zrobiłem, to było stworzenie DataGrid, która przypominała ListView, ale z własnym flarą.Zrobiłem to, ponieważ DataGrid ma już wbudowany przycisk do swoich komórek.

Tak, wiem, rodzaj fugly "hack", ale działa jak urok! :)

Rekwizyty dla Shay Erlichmen, który poprowadził mnie do myślenia poza moim listBoxem. Widzisz co zrobiłem? ;)

+1

Tak, DataGrids doskonale do tego pasują, chociaż są bardziej skomplikowane niż ListBox. Możesz sprawić, by wyglądał jak stół w HTML lub innym podobnym stylu. –

0

Nie wiem, dlaczego chciałbyś to zrobić? Wstawiłbym przycisk na dole, który usuwałby wszystkie wybrane elementy z listy. Jest to zwyczajowy sposób robienia czegoś takiego, chyba że chcesz użyć jquery i umieścić zdarzenie onClick w polu listy, które wysyła wywołanie, aby usunąć element, jeśli jest on przechowywany w bazie danych lub usunąć element z listy na stronie .

+3

Cóż, nie jestem zwykły i staram się wybrać bardziej zaawansowaną opcję. Rzecz w tym, że przycisk (lub ikona przycisku) na stronie jest przyjemniejszy dla oka, a także zmniejsza liczbę kliknięć jednym kliknięciem podczas usuwania. – Vectovox

2

przy użyciu System; przy użyciu System.Collections.Generic; przy użyciu System.Windows.Forms;

nazw WindowsFormsApplication11 { public partial class Form1: Form _items { list = new List();

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 (object sender, EventArgs e) { // Add przycisk został kliknięty. // ...

button2.Enabled = true; 

}

private void button2_Click (object sender, EventArgs e) { // Przycisk Usuń został kliknięty. // ....

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

}

+0

Powinien przeczytać to lepiej;) –

+0

Tak, nie sądzę, że czytasz moje pytanie bardzo dokładne :) – Vectovox

+0

@Alb Pytanie mówi, że "w ten sposób będąc wewnątrz ListBox". W każdym razie ta technika listy listbox.datasource = jest znacznie bardziej kompaktowa niż wyraźna, dodaj. Więc nadal odpowiedź jest warta. – prabhakaran

6

Zamiast ListBox można użyć ListView, ListView ma ability to add custom column types.

+0

ListBox i ListView są oddalone od siebie o kilka mil. Może powinien on rzucić kontrolę drzewa na dobrą miarę –

+1

ListView w trybie raportu bez nagłówków z pełnym wyborem wierszy, a nie linie siatki wyglądają i zachowują się tak samo jak ListBox. Łatwiej jest dodać przyciski (lub jakąkolwiek inną kontrolę w tym zakresie) jako element podrzędny, lepiej niż próbować utworzyć niestandardowy formant. –

Powiązane problemy