如何创建一个列表框,其中包含索引编号,后跟列表项

时间:2013-01-28 11:40:20

标签: c# winforms listview listbox

在Winforms中,我想显示一个列表框,其中包含项目索引编号和项目,完全如下面的Figure所示。我已经浏览了很多SO链接以及许多文章,其中大多数都使用ListView而不是ListBox,而不是显示List Item索引,它们在其中显示Image + Item。我对listview很满意,但我的目标是显示带有相应索引的项目,并选择它应该只给我项目。任何人都可以使用C#在Winform中为我提供任何链接或想法。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以自定义列表框

以下链接将指导您正确的方向。

http://www.codeproject.com/Articles/15464/Extending-the-ListBox-to-show-more-complex-items

答案 1 :(得分:1)

我认为您应该考虑将列表框上的DrawMode属性设置为DrawMode.Manual并处理代码中项目的绘制。

查看http://msdn.microsoft.com/en-us/library/system.windows.forms.drawmode.aspx

答案 2 :(得分:1)

我认为最好的选择是使用DataGridView和两列:

  • DataGridViewButtonColumn,AutoSizeMode = AllCells
  • DataGridViewTextBoxColumn,ReadOnly = true,AutoSizeMode = Fill

同样RowHeadersVisibleColumnHeadersVisible为false。结果:

enter image description here

代码:

string[] members = { "Beverages", "Condiments", "Confections" };
dataGridView1.DataSource = members.Select((x, i) => new { Value = x, Index = i })
                                  .ToList();

您还需要将列DataPropertyName设置为索引和值。

更新(适用于.NET 2.0):

string[] members = { "Beverages", "Condiments", "Confections" };
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = members;

订阅CellFormatting活动:

void dataGridView1_CellFormatting(object sender, 
                                  DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex == 0)
    {
        e.Value = e.RowIndex;
        return;
    }

    e.Value = dataGridView1.Rows[e.RowIndex].DataBoundItem;
}