簡體   English   中英

從列表框中獲取所選項目

[英]Getting selected item from a listbox

我的問題很奇怪,我試圖將列表中所選項目寫入字符串,而我的字符串始終為空。

這是我的代碼:

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

在此處輸入圖片說明

調試-編輯2 在此處輸入圖片說明

不要將字符串生成器添加到列表中,這是對對象集合的對象引用。 使用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);
        }
    }
}

在此處輸入圖片說明

如果要檢索項目的顯示文本,請使用GetItemText方法:

string text = listBox1.GetItemText(listBox1.SelectedItem);

這是因為您添加項目的方式而不是您檢索它們的方式。

當您調用listBox1.Items.Add(ab); 您正在將實例 ab添加到listbox 這意味着您在列表框中有4個對ab引用,但是由於ab.Clear()調用, ab是空的。 在將文本添加到列表框中時,必須將其值設置為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();
}

我猜您正在使用多重選擇ListBox ,因此,應以這種方式使用ListBox.SelectedItems ,並遍歷接收到的項目以分別打印它們。

您只需要將選定的項目獲取到ListBoxItem,然后將內容分配給所需的字符串即可:

            ListBoxItem listboxitem = (ListBoxItem) ListBox1.SelectedItem;
            string a = listboxitem.Content.ToString();

這對我有用,希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM