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

时间:2014-10-20 22:46:38

标签: c# winforms 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));

1 个答案:

答案 0 :(得分:1)

好的,我现在发现了如何做到这一点。 它是通过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
* ...