2015-11-14 69 views
1

我遇到了问题。 我正在创建一个使用我们的电话配置文件的小应用程序。 我创建了一个类叫电话并给予其4个属性:Listbox displayMember not working

private int extension; 
private String sExtension; 
private String userName; 
private String filePath; 

我已经包含了相应的get/set方法,以及:

public String Extension 
{ 
    get 
    { 
     return sExtension; 
    } 
} 
public String Path 
{ 
    get 
    { 
     return filePath; 
    } 
} 

我创建了一个实用工具类,做最的静态工作。包括一种方法来创建电话对象的List<Phone>以填充ListBox

一切工作到将List<Phone>返回作为ListBox的数据源。我已将两个:

fileList = Directory.EnumerateFiles(path, "ext-*"); 
lst_Files.DataSource = Utility.populatePhoneList(fileList); 
lst_Files.DisplayMember = "Extension"; 
lst_Files.ValueMember = "Path"; 

我仍然遇到的问题是仍然由对象名称填充(参考MSDN Article

我已经通过这个论坛上一对夫妇的文章阅读ListBox并且大多数提到同样的问题,我可能不会正确呼叫ListBox.DisplayMember,但我相信我。

编辑:我已尝试退回List<T>,ArrayList,Array[]

编辑:代码实用

public static List<Phone> populatePhoneList(IEnumerable<String> newFileList) 
{ 
    List<Phone> phones = new List<Phone>(); 
    Phone p = null; 

    for (int i = 0; i < newFileList.Count(); i++) 
    { 
     p = getPhoneInfo(newFileList.ElementAt(i)); 
     phones.Add(p); 
    } 
    return phones; 
} 

public static Phone getPhoneInfo(String newPath) 
{ 
    StreamReader sr = new StreamReader(newPath); 
    Phone p1 = new Phone(); 
    p1.setFilePath(newPath);    
    String testLine; 

    while (sr.Peek() >= 0) 
    { 
     testLine = sr.ReadLine(); 
     if (testLine.Contains("reg.1.displayName")) 
      p1.setUserName(testLine.Substring(testLine.IndexOf("\"") + 1, ((testLine.LastIndexOf("\"") - 1) - testLine.IndexOf("\"")))); 
     if (testLine.Contains("reg.1.address")) 
      p1.setExtension(testLine.Substring(testLine.IndexOf("\"") + 1, ((testLine.LastIndexOf("\"") - 1) - testLine.IndexOf("\"")))); 
    } 
    return p1; 
} 
+0

代码看起来没问题。我猜,我们必须看到你的'Utility.populatePhoneList'函数。 – LarsTech

+0

可以显示Utility.populatePhoneList(fileList)的代码 –

+0

在周末深入探讨这个问题之后,我开始禁用'ListBox'上的一些事件处理程序,并发现它正常工作。我发现我的'ListBox.SelectedIndexChanged'事件在系统完全填充前捕获了列表。我的解决方案是将'ListBox.SelectionMode'变成none,然后在ListBox被填充后重置。 –

回答

0

挖掘到这个问题在上周末后,我开始对ListBox禁用某些事件处理程序,并发现它的工作,因为它应该是。我发现我的ListBox.SelectedIndexChanged事件在系统完全填充之前就已经出现了。我的解决方案是将ListBox.SelectionMode设置为none,然后在填充ListBox后重置它。