【问题标题】:Listbox displayMember not working列表框显示成员不起作用
【发布时间】:2015-11-14 00:20:05
【问题描述】:

我遇到了一个问题。 我正在创建一个小应用程序来处理我们的手机配置文件。 我创建了一个名为 Phone 的类并赋予它 4 个属性:

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";

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

我已经阅读了这个论坛上的几篇文章,大多数都提到了同样的问题,我可能没有正确调用 ListBox.DisplayMember,但我相信我是。

编辑:我尝试返回 List<T>ArrayListArray[]

编辑:实用程序代码

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;
}

【问题讨论】:

  • 代码看起来不错。我猜我们必须看到你的 Utility.populatePhoneList 函数。
  • 你能显示 Utility.populatePhoneList(fileList) 的代码吗
  • 在周末深入研究这个问题后,我开始禁用ListBox 上的一些事件处理程序,并发现它可以正常工作。我发现我的ListBox.SelectedIndexChanged 事件在系统完全填充之前捕获了列表。我的解决方案是将ListBox.SelectionMode 设为无,然后在ListBox 填满后将其重置。

标签: c# listbox listboxitems


【解决方案1】:

在周末深入研究这个问题后,我开始禁用ListBox 上的一些事件处理程序,并发现它可以正常工作。我发现我的ListBox.SelectedIndexChanged 事件在系统完全填充之前捕获了列表。我的解决方案是将ListBox.SelectionMode 设为无,然后在ListBox 填满后将其重置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多