如何为ListBox项提供有意义的名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为ListBox项提供有意义的名称相关的知识,希望对你有一定的参考价值。

我已经使用以下类型的项填充了一个listBox:

Tuple<List<Point>,List<int>>

现在当我运行我的应用程序时,listBox窗口显示如下项目:

(System.Collection.Generic.List'1[System.Drawing.Point].Systen,Collection...)
(System.Collection.Generic.List'1[System.Drawing.Point].Systen,Collection...)
(System.Collection.Generic.List'1[System.Drawing.Point].Systen,Collection...)

相反,我希望listBox显示每个项目的字符串“Region”+ item的索引。

像这样:

Region0

区域1

区域2

...

要填充listBox,我使用以下代码:

 listBoxPossibleCandidates.DataSource = possibleCandidates;

可能的候选人填充这样的循环:

possibleCandidates.Add(Tuple.Create(regionPoints, regionIntensities));
答案

好的,我现在发现了如何做到这一点。它是通过ListControl.DisplayMember属性完成的。

它显示的原因(System.Collection.Generic.List`1 [System.Drawing.Point] .Systen,Collection ...)是因为:

“如果对象上不存在指定的属性,或者DisplayMember的值是空字符串(”“),则会显示对象的ToString方法的结果。”

资料来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.displaymember(v=vs.110).aspx

我使用的代码:

class Region
{
    private int myIndex;
    private List<Point> regionCoordinates;
    private List<int> regionIntensitiesDistinct;

    public Region(List<Point> regionCoordinates, List<int> regionIntensities, int index)
    {
        this.regionCoordinates = regionCoordinates;
        this.regionIntensitiesDistinct = regionIntensities.Distinct().ToList();
        this.myIndex = index;
    }

    public string MyDescription
    {
        get
        {
            return "Region-" + myIndex;
        }
    }

    public List<Point> getRegionCoordinates()
    {
        return regionCoordinates;
    }

    public List<int> getRegionIntensitiesDistinct()
    {
        return regionIntensitiesDistinct;
    }
}

现在这就是我填充listBox的方式:

List<Region> possibleCandidates = new List<Region>();

//using loop I add all the regions:
possibleCandidates.Add(new Region(regionPoints, regionIntensities, possibleCandidates.Count));

//after possibleCandidates are populated I pass them to the listBox for display
listBoxPossibleCandidates.DataSource = possibleCandidates;
listBoxPossibleCandidates.DisplayMember = "MyDescription";

listBox输出现在是:

* Region-0
* Region-1
* Region-2
* ...

以上是关于如何为ListBox项提供有意义的名称的主要内容,如果未能解决你的问题,请参考以下文章

如何为ListBox的每个项添加“删除”按钮并实现其功能?

Apache Derby 为我用有意义的名称创建的索引提供了奇怪的名称

编写高质量代码改善C#程序的157个建议——建议142:总是提供有意义的命名

如何处理和解析JPA持久性异常以向用户提供有意义的消息

第二章 有意义的命名

代码整洁之道