C# 从列表框中获取所选项目
我的问题很奇怪,我试图将列表中的选定项写入字符串,而我的字符串总是空的 这是我的代码:C# 从列表框中获取所选项目,c#,winforms,C#,Winforms,我的问题很奇怪,我试图将列表中的选定项写入字符串,而我的字符串总是空的 这是我的代码: void loader(MethodInfo[] methArr) { //string abba = ""; listBox1.Items.Clear(); //loop for (int i = 0; i < methArr.Length; i++) { ab = ab.AppendLine(methArr[i].ToString());
void loader(MethodInfo[] methArr)
{
//string abba = "";
listBox1.Items.Clear();
//loop
for (int i = 0; i < methArr.Length; i++)
{
ab = ab.AppendLine(methArr[i].ToString());
//abba = ab.ToString();
listBox1.Items.Add(ab);
ab.Clear();
}
}
private void button1_Click(object sender, EventArgs e)
{
checker();
}
private void button2_Click(object sender, EventArgs e)
{
string a = listBox1.GetItemText(listBox1.SelectedItem.ToString());
string b = listBox1.SelectedItem.ToString();
string c = "dummy";
MessageBox.Show(a + b + c);
}
void加载器(MethodInfo[]methArr)
{
//字符串abba=“”;
listBox1.Items.Clear();
//环路
对于(int i=0;i
如果我使用SelectedIndex,它会显示索引,否则我只会得到C字符串
这是我的完整代码:
调试-编辑2
如果要检索项目的显示文本,请使用GetItemText方法:
string text = listBox1.GetItemText(listBox1.SelectedItem);
我猜您正在使用,因此,您应该以这种方式使用ListBox。选择EdItems,并对收到的项目进行迭代以单独打印。您只需将所选项目获取到ListBoxItem,然后将内容分配到所需的字符串:
ListBoxItem listboxitem = (ListBoxItem) ListBox1.SelectedItem;
string a = listboxitem.Content.ToString();
这对我很有用,希望对我有帮助。不要将字符串生成器添加到列表中,这是对对象集合的对象引用。使用
ToString()
方法(如您所注释)
请参见此示例:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 10; i++)
{
builder.Append(i);
listBox1.Items.Add(builder);
builder.Clear();
}
for (int i = 0; i < 10; i++)
{
builder.Append(i);
listBox2.Items.Add(builder.ToString());
builder.Clear();
}
}
private void button2_Click(object sender, EventArgs e)
{
string a = listBox1.GetItemText(listBox1.SelectedItem.ToString());
string b = listBox1.SelectedItem.ToString();
string c = listBox1.GetItemText(listBox1.SelectedItem);
string d = listBox2.GetItemText(listBox2.SelectedItem.ToString());
string f = listBox2.SelectedItem.ToString();
string g = listBox2.GetItemText(listBox2.SelectedItem);
MessageBox.Show("1:" + a + b + c + "\r\n2: " + d+ f + g);
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
命名空间Windows窗体应用程序3
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
StringBuilder=新的StringBuilder();
对于(int i=0;i<10;i++)
{
附录(i);
listBox1.Items.Add(生成器);
builder.Clear();
}
对于(int i=0;i<10;i++)
{
附录(i);
listBox2.Items.Add(builder.ToString());
builder.Clear();
}
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
字符串a=listBox1.GetItemText(listBox1.SelectedItem.ToString());
字符串b=listBox1.SelectedItem.ToString();
字符串c=listBox1.GetItemText(listBox1.SelectedItem);
字符串d=listBox2.GetItemText(listBox2.SelectedItem.ToString());
字符串f=listBox2.SelectedItem.ToString();
字符串g=listBox2.GetItemText(listBox2.SelectedItem);
MessageBox.Show(“1:+a+b+c+”\r\n2:+d+f+g);
}
}
}
这是因为您添加项目的方式,而不是检索项目的方式 调用
listBox1.Items.Add(ab)时
您正在将实例ab
添加到列表框中。这意味着您在列表框中有4个对ab
的引用,但是ab
由于ab.Clear()
调用而为空。文本在添加到列表框时必须设置为ab
的值,但是当您检索引用的项目时,您会得到当前的ab
,该值为空
要解决此问题,您可以在循环的每次迭代中创建一个新的StringBuilder
,并删除对Clear()
的调用:
for(int i=0;i
或者使用StringBuilder的ToString()方法:
StringBuilder ab = new StringBuilder();
for (int i = 0; i < methArr.Length; i++)
{
ab = ab.AppendLine(methArr[i].ToString());
listBox1.Items.Add(ab.ToString());
ab.Clear();
}
StringBuilder ab=new StringBuilder();
对于(int i=0;i
TrylistBox1.GetItemText(listBox1.SelectedItem)代码>仍然不工作,请查看我的线程,这不是java代码吗?我知道C#与java很相似,但它有这么相似吗?@Synoon不,这是C#,看看标签。噢,是的,thx String;)如果您单步执行代码(使用断点+F10),变量“a”“b”和“c”是否检索到值?请查看我的编辑,似乎“所选项为空”,但我确实选择了它,如果我不选择它并按start方法,我会得到一个错误(异常)你也可以看看可能有用的不同事件处理程序。看起来我的速度太慢了2秒LOL.+1
StringBuilder ab = new StringBuilder();
for (int i = 0; i < methArr.Length; i++)
{
ab = ab.AppendLine(methArr[i].ToString());
listBox1.Items.Add(ab.ToString());
ab.Clear();
}