列表框显示成员不工作
本文关键字:工作 成员 显示 列表 | 更新日期: 2023-09-27 18:21:48
我遇到了一个问题。我正在创建一个小应用程序来处理我们的手机配置文件。我创建了一个名为Phone的类,并赋予它4个属性:
private int extension;
private String sExtension;
private String userName;
private String filePath;
我已经包括了各自的获取/设置方法以及:
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";
我仍然遇到的问题是ListBox
仍然由对象名称填充(参考MSDN文章)
我已经阅读了这个论坛上的几篇文章,大多数文章都提到了同样的问题,我可能没有正确地调用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;
}
在周末深入研究这个问题后,我开始禁用ListBox
上的一些事件处理程序,并发现它正常工作。我发现我的ListBox.SelectedIndexChanged
事件在系统完全填充之前就已经捕获了列表。我的解决方案是将ListBox.SelectionMode
设置为无,然后在填充ListBox
后将其重置。