Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-在列表框中选择多个项目,并在Windows窗体中转换为逗号分隔的字符串_C#_Winforms_Listbox - Fatal编程技术网

C#-在列表框中选择多个项目,并在Windows窗体中转换为逗号分隔的字符串

C#-在列表框中选择多个项目,并在Windows窗体中转换为逗号分隔的字符串,c#,winforms,listbox,C#,Winforms,Listbox,我正在构建一个GUI,用列表框中的值更新数据库。我已经连接到服务器和数据库,我让它将信息放入正确的列中。我就是不能让它显示我选择的多个值。我对这个很陌生 string colors = ""; StringBuilder sb = new StringBuilder(); foreach (var items in listboxColor.SelectedItems) { sb.Append(listboxColor.SelectedItem + ", "); } colors = sb.

我正在构建一个GUI,用列表框中的值更新数据库。我已经连接到服务器和数据库,我让它将信息放入正确的列中。我就是不能让它显示我选择的多个值。我对这个很陌生

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

这是一个例子:

Example ListBox (** is the selected item)
**Red**
Blue
**Green**
Yellow
Orange
**Purple**
--------------------------
Output:
Red, Red, Red
我希望它是这样的:

Output:
Red, Green, Purple

谢谢大家!!如果您需要更多信息,请告诉我。

问题在于foreach中的行

您使用的是
listboxColor.SelectedItem
,它可以获取具有焦点的所选项目(因此始终保持不变)

以下是正确的代码:

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

问题是foreach中的行

您使用的是
listboxColor.SelectedItem
,它可以获取具有焦点的所选项目(因此始终保持不变)

以下是正确的代码:

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

如果您只有
字符串
作为列表框项,则可以执行此操作

string colors = "";
StringBuilder sb = new StringBuilder();
foreach (string item in lbOwner.SelectedItems)
{
    sb.Append(item + ", ");
} 
colors = sb.ToString();
如果
ListBoxItem
是一个对象,则需要将其转换为相应的类型,并获取所需的属性/字段

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

如果您只有
字符串
作为列表框项,则可以执行此操作

string colors = "";
StringBuilder sb = new StringBuilder();
foreach (string item in lbOwner.SelectedItems)
{
    sb.Append(item + ", ");
} 
colors = sb.ToString();
如果
ListBoxItem
是一个对象,则需要将其转换为相应的类型,并获取所需的属性/字段

ex..
foreach (object item in lbOwner.SelectedItems)
{
    sb.Append((item as type1).Prop1 + ", ");
}
事实上,“string.Join”要简单得多

string.Join(", ", listboxColor.SelectedItems.Cast<object>())
事实上,“string.Join”要简单得多

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

看一看这个链接看一看这个链接我同意它需要更少的带有
字符串的代码。加入
,但由于场景不那么复杂,我不能打赌。首先,我只想说,当初学者提出问题时,我总是倾向于修改不太可能的代码。其次,当我使用这样的循环时,我通常在“item”之前加上“separator”,如果“colors”变量不是空的,我会删除第一个分隔符,它只需要一个条件验证而不是N。因此,我将两个答案放在一起。初学者需要修改代码;但同时学会高效地编写可读代码。无论如何,移除第一个分隔符的确是一个好主意,谢谢。我同意他们需要学习,但我们永远不能假设他们的学习曲线和他们在哪里。我已经教过初学者了,这就是为什么我更喜欢:一次只做一件事。我同意它需要更少的带有
字符串的代码。加入
,但由于场景不太“复杂”,我不能打赌。首先,我只想说,当初学者提出问题时,我总是倾向于修改不太可能的代码。其次,当我使用这样的循环时,我通常在“item”之前加上“separator”,如果“colors”变量不是空的,我会删除第一个分隔符,它只需要一个条件验证而不是N。因此,我将两个答案放在一起。初学者需要修改代码;但同时学会高效地编写可读代码。无论如何,移除第一个分隔符的确是一个好主意,谢谢。我同意他们需要学习,但我们永远不能假设他们的学习曲线和他们在哪里。我已经教过初学者了,这就是为什么我更喜欢:一次做一件事。