2016-06-16 10 views
1

Ich baue eine GUI, um eine Datenbank mit Werten aus einer Listbox zu aktualisieren. Ich habe bereits eine Verbindung mit dem Server und der Datenbank hergestellt, und ich habe Informationen in die richtigen Spalten eingefügt. Ich kann es einfach nicht dazu bringen, die von mir ausgewählten Werte anzuzeigen. Ich bin ziemlich neu in diesem Bereich.C# - Auswählen mehrerer Elemente in einer ListBox und Konvertieren in eine durch Komma getrennte Zeichenfolge in Windows Form

string colors = ""; 
StringBuilder sb = new StringBuilder(); 
foreach (var items in listboxColor.SelectedItems) 
{ 
sb.Append(listboxColor.SelectedItem + ", "); 
} 
colors = sb.ToString(); 

Dies ist ein Beispiel:

Example ListBox (** is the selected item) 
**Red** 
Blue 
**Green** 
Yellow 
Orange 
**Purple** 
-------------------------- 
Output: 
Red, Red, Red 

Ich will es so sein:

Output: 
Red, Green, Purple 

Thank you! Wenn Sie weitere Informationen benötigen, lassen Sie es mich bitte wissen.

+0

einen Blick auf diesen Link nehmen https://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selectionmode(v=vs.110).aspx – Jules

Antwort

2

Das Problem ist die Zeile in der Foreach.

Sie verwenden listboxColor.SelectedItem, die das ausgewählte Element mit Fokus erhält (also immer das gleiche). Hier

ist der richtige Code:

string colors = ""; 
StringBuilder sb = new StringBuilder(); 
foreach (var currentItem in lbOwner.SelectedItems) 
{ 
sb.Append(currentItem + ", "); 
} 
colors = sb.ToString(); 
1

Wenn Sie nur string als Listbox-Element haben Sie dies tun könnte.

string colors = ""; 
StringBuilder sb = new StringBuilder(); 
foreach (string item in lbOwner.SelectedItems) 
{ 
    sb.Append(item + ", "); 
} 
colors = sb.ToString(); 

im Fall, wenn ListBoxItem ist ein Objekt Sie ihm jeweilige Art werfen müssen und die Eigenschaft/Feld erforderlich bekommen.

ex.. 
foreach (object item in lbOwner.SelectedItems) 
{ 
    sb.Append((item as type1).Prop1 + ", "); 
} 
2

In der Tat ist "string.Join" viel einfacher.

string.Join(", ", listboxColor.SelectedItems.Cast<object>()) 

Es ist kompliziert, "foreach" wegen der Kommas zu verwenden.

StringBuilder sb = new StringBuilder(); 
bool isFollowing = false; 
foreach (var item in listboxColor.SelectedItems) 
{ 
    if (isFollowing) 
    { 
     sb.Append(", "); 
    } 
    else 
    { 
     isFollowing = true; 
    } 

    sb.Append(item); 
} 
string colors = sb.ToString(); 
+0

ich zustimmen braucht weniger Code mit 'string.Join', aber weniger" komplex "ist die Szene, darauf könnte ich nicht wetten. Erstens, ich sage immer, ich bevorzuge es, den weniger möglichen Code zu ändern, wenn, wie es scheint, ein Anfänger eine Frage stellt. Zweitens, wenn ich eine Schleife wie diese verwende, hänge ich normalerweise das "Trennzeichen" vor dem "Element" an und entferne, wenn die Variable "Farben" nicht leer ist, das erste Trennzeichen-Vorkommen, das nur eine Bedingungsprüfung anstelle von N erfordert –

+0

Daher poste ich zwei Antworten zusammen. Anfänger muss seinen Code reparieren; Gleichzeitig lernt es, lesbaren Code effizient zu schreiben. Wie auch immer, das Entfernen des ersten Separators ist in der Tat eine großartige Idee, danke. – Tommy

+0

Ich stimme zu, dass sie lernen müssen, aber wir können niemals ihre Lernkurve annehmen und wo sie sind. Ich habe bereits Anfänger unterrichtet und deshalb bevorzuge ich: eine Sache nach der anderen. –