C# Windows应用程序:将组中的ListView项目与行的中心对齐
我有一个用C#编写的windows应用程序,我想根据人们的分数将他们分为3个级别;第一级得分最高者,第二级得分第三,第三级得分第三 我已经实现了这一点,如图所示,使用ListView和3个组成功地实现了这一点;我的问题是:我可以将每组中的项目对齐到中心吗?项目向左对齐C# Windows应用程序:将组中的ListView项目与行的中心对齐,c#,winforms,listview,C#,Winforms,Listview,我有一个用C#编写的windows应用程序,我想根据人们的分数将他们分为3个级别;第一级得分最高者,第二级得分第三,第三级得分第三 我已经实现了这一点,如图所示,使用ListView和3个组成功地实现了这一点;我的问题是:我可以将每组中的项目对齐到中心吗?项目向左对齐 不,如果没有所有者绘图列表视图,这是不可能的 原因是ShowGroups属性的错误 如果为false,则可以计算每个ListViewItem的位置 下面是如何修改ListViewItem的位置: ListViewItem lvi
不,如果没有
所有者绘图
列表视图,这是不可能的
原因是ShowGroups
属性的错误
如果为false,则可以计算每个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
,则这不会产生效果。计算偏移量也不是一项简单的任务;毕竟,这取决于组和行中项目的数量
因此,您必须自己绘制列表视图
,这将起作用,但在确定确切位置时也会遇到同样的问题
在我看来,将两个项目放在中间会使整个布局看起来参差不齐,丑陋不堪
也许最简单的解决方案是一种变通方法:只需在需要的地方添加一个虚拟项。它的图像应该是透明的,或者它的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);
}
}
当然,现在您的列表视图中有一个可单击的虚拟项
如果要在一个组中重新订购更多的项目
,则需要将它们全部删除到列表中,然后按新的顺序重新添加