【问题标题】:Arrange 2 List<string> to list box将 2 List<string> 排列到列表框
【发布时间】:2012-04-05 03:08:47
【问题描述】:

我有 2 个要放入列表框中的列表 第一个列表包含名称,第二个包含数字 我的问题是有些名字很长,所以数字不能显示在同一行 我怎样才能以适当的方式放入?

listBox.Items.Add("Name" + "\t\t\t" + "Number");
for (int i = 0; i < lists.Count; i++)
{
    listBox.Items.Add(lists._namesList[i] + "\t\t\t" + lists._numbersList[i]);
}

更新这是我尝试使用ListView

listViewProtocols.View = View.Details;
listViewProtocols.Columns.Add("Name");
listViewProtocols.Columns.Add("Number");

for (int i = 0; i < lists._protocolsList.Count; i++)
{
    listViewProtocols.Items.Add(new ListViewItem{ lists._nameList[i], lists._numbersList[i].ToString()});
}

【问题讨论】:

  • 您可能应该为此使用网格,而不是简单的ListBox
  • 是的,DataGridView - msdn.microsoft.com/en-us/library/… 如果这太重了,您可以考虑改用ListView,并将其放在详细信息视图中。不过,管理子项目可能会很痛苦。
  • 如何从我的列表中填充 DataGridView ?
  • @user979033:请不要用新问题替换原来的问题,因为不再有答案了。使用更新和编辑添加到您的帖子。

标签: c# winforms listbox


【解决方案1】:

考虑使用 Details 样式的 ListView 组件。正如@Yuck 在 cmets 中提到的那样,它会给你你需要的效果。

从 2 个单独的列表中填充有点尴尬,但可以使用以下代码:

listView1.View=View.Details;
listView1.Columns.Add("Name");
listView1.Columns.Add("Number");

string[] names= { "Abraham", "Buster", "Charlie" };
int[] numbers= { 1018001, 1027400, 1028405 };

for(int i=0; i<names.Length; i++)
{
    listView1.Items.Add(
        new ListViewItem(new string[] {
        names[i], numbers[i].ToString() }));                
}

我强烈建议使用结构数组而不是像这样的单独列表:

public struct Record
{
    public string name;
    public int number;

    public string[] ToStringArray()
    {
        return new string[] {
            name,
            number.ToString() };
    }
}

并像这样使用:

    listView1.View=View.Details;
    listView1.Columns.Add("Name");
    listView1.Columns.Add("Number");

    Record[] list=new Record[] {
        new Record() { name="Abraham", number=1018001 },
        new Record() { name="Buster", number=1027400 },
        new Record() { name="Charlie", number=1028405 }
    };

    for(int i=0; i<list.Length; i++)
    {
        listView1.Items.Add(
            new ListViewItem(list[i].ToStringArray()));
    }

【讨论】:

  • 查看我的更新,我收到错误:无法使用集合初始化程序初始化类型“System.Windows.Forms.ListViewItem”,因为它没有实现“System.Collections.IEnumerable”
  • @user979033:您需要使用string 数组初始化ListViewItem,例如new ListViewItem(new string[] {...})。您忘记了代码中的new string[]
【解决方案2】:

我能想到几个选项:

  1. 使列表框更宽,以便容纳更长的文本或添加水平滚动条。
  2. 将名称的最大长度限制为 20 个字符,并将多余的字符替换为 ...
  3. 可能最好的解决方案是使用网格而不是列表框 - 您需要显示两列数据,这正是网格的用途。

【讨论】:

    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2010-12-02
    • 2012-09-06
    • 1970-01-01
    相关资源
    最近更新 更多