我的问题非常奇怪,我正在尝试将一个字符串写入列表中的所选项目,并且我的字符串始终为空。
这是我的代码:
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);
}
如果我使用SelectedIndex,它会显示索引,但否则我只会得到C字符串
这是我的完整代码:http://pastebin.com/i0McETZz
DEBUG - EDIT2
答案 0 :(得分:4)
不要将字符串构建器添加到列表中,该列表构建器是对象集合的对象引用。使用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);
}
}
}
答案 1 :(得分:2)
如果要检索项目的显示文本,请使用GetItemText方法:
string text = listBox1.GetItemText(listBox1.SelectedItem);
答案 2 :(得分:2)
这是因为您添加项目的方式而不是您检索项目的方式。
当您致电listBox1.Items.Add(ab);
时,您要将实例 ab
添加到listbox
。这意味着您在列表框中有ab
的4个引用,但由于ab
调用,ab.Clear()
为空。文本必须在添加到列表框时设置为ab
的值,但是当您检索引用的项目时,您将获得当前 ab
为空。
要解决这个问题,您可以在循环的每次迭代中创建一个新的StringBuilder
并删除对Clear()
的调用:
for (int i = 0; i < methArr.Length; i++)
{
StringBuilder ab = new StringBuilder();
ab = ab.AppendLine(methArr[i].ToString());
listBox1.Items.Add(ab);
}
或者使用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();
}
答案 3 :(得分:1)
我猜您使用的是a multiple-selection ListBox,因此,您应该使用ListBox.SelectedItems
,并迭代收到的项目以单独打印。
答案 4 :(得分:1)
您只需要将所选项目添加到ListBoxItem,然后将内容分配给您需要的字符串:
ListBoxItem listboxitem = (ListBoxItem) ListBox1.SelectedItem;
string a = listboxitem.Content.ToString();
这对我有用,希望有所帮助