You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中如何使用DevExpress获取ListBox选中项的文本?

解决DevExpress ListBox选中项显示类型名而非目标文本的问题

嘿,我懂你这会儿的困扰——明明想拿到ListBox里选中的“Country Update”文本,结果弹出来的却是DevExpress.XtraEditors.BaseListboxControl+SelectedItemCollection这种类型名称,完全不是你要的内容。我来帮你捋清楚问题出在哪,再给你解决办法:

问题根源

出现这种情况主要有两个原因:

  • 你大概率直接调用了SelectedItems(选中项集合)的ToString()方法,而不是去获取单个选中项的具体内容;
  • 你添加到ListBox的是FilterColumnHeader类的实例,默认情况下自定义类对象的ToString()会返回它的类型全名,而不是你存在里面的文本。

针对性解决方案

根据你的ListBox是单选还是多选场景,分别处理:

场景1:单选模式(只选一个项)

先确保你获取的是单个选中项,而非集合,然后强转为FilterColumnHeader类型,再访问它存储文本的属性(比如假设你的类里有Text或HeaderText这类属性,记得替换成你实际的属性名):

// 先判断是否有选中项,避免空引用报错
if (yourListBoxName.SelectedItem != null)
{
    FilterColumnHeader selectedHeader = (FilterColumnHeader)yourListBoxName.SelectedItem;
    // 这里的Text替换成FilterColumnHeader类中存储"Country Update"的属性名
    string targetText = selectedHeader.Text;
    MessageBox.Show(targetText);
}

场景2:多选模式(选多个项)

如果是多选,你需要遍历SelectedItems集合,逐个转换为FilterColumnHeader实例并提取文本:

foreach (var item in yourListBoxName.SelectedItems)
{
    FilterColumnHeader headerItem = (FilterColumnHeader)item;
    string itemText = headerItem.Text; // 同样替换为实际属性名
    // 可以把文本拼接起来或者逐个弹窗显示
    MessageBox.Show(itemText);
}

额外优化小技巧

如果你不想每次都手动提取属性,可以给FilterColumnHeader类重写ToString()方法,这样后续直接调用对象的ToString()就能返回你想要的文本:

public class FilterColumnHeader
{
    public string Text { get; set; }

    // 重写ToString方法,让它返回存储的文本
    public override string ToString()
    {
        return Text;
    }
}

这样之后,哪怕你直接写MessageBox.Show(yourListBoxName.SelectedItem.ToString()),也能得到正确的“Country Update”文本啦。

内容的提问来源于stack exchange,提问作者Liam neesan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:17:47