2016-05-08 63 views
1

我在C#中有一个Windows应用程序,我想根据他们的分数将人排名为3个级别;一级最高分,三级最高分,第三级最高分。Windows应用程序:对齐ListView项中的一组到行的中心

我已经实现了这一点,如图所示,成功地使用3个组的ListView;我的问题是:我可以将每个组中的项目对齐到中心吗?项目对齐到左

enter image description here

回答

2

不,这不是真的有可能不owner-drawingListView

原因是ShowGroups财产。

如果是假的,你可以计算出Position每个ListViewItem ..

下面是如何修改ListViewItem的位置:

ListViewItem lvi = listView1.Items[3]; 
lvi.Position = new Point(lvi.Position.X + 50, lvi.Position.Y); 
lvi.Text = "X testing X"; 

但是,这不会有如果ListView效果不幸的是有ShowGroups = true。计算偏移量也不是一项简单的任务;毕竟它将根据组中和排中的Items两个的数量而不同。

因此,您必须自行提取ListView,这将起作用,但在确定确切位置时会遇到同样的问题。

将两个物品居中会使整个布局看起来锯齿状和丑陋,imo。

也许最简单的解决方法是一种解决方法:只需在需要的地方添加一个虚拟物品。它的图像将是透明的或其ImageIndex = -1;及其文本为空或空白。您可以将它插入到每个组中具有不可被整行中最大项整除的奇数项。在你的情况3.也许这是足以检查组只包含一个项目..

下面是一个例子:

void InsertBlankItem(ListView lv, ListViewGroup lvg) 
{ 
    ListViewItem lvOld = g.Items[0]; 
    lvg.Items.Remove(lvOld); 
    ListViewItem lviBlank = new ListViewItem() { Text = " ", ImageIndex = -1 }; 
    lviBlank.Group = lvg; 
    listView1.Items.Add(lviBlank); 
    lvg.Items.Insert(1, lvOld); 
} 

这增加了一个空白的项目和移动的第一个项目到最后..:

private void button1_Click(object sender, EventArgs e) 
{ 
    foreach (ListViewGroup g in listView1.Groups) 
    { 
     if (g.Items.Count == 1) InsertBlankItem(listView1, g); 

    } 
} 

当然,现在你有一个可点击的虚拟物品在你ListView ..

如果你想重新为更Items在组内你需要将它们全部删除到列表中,并按照新的顺序重新添加它们。

enter image description hereenter image description here