【问题标题】:Windows application: align ListView items in a group to center of lineWindows 应用程序:将组中的 ListView 项目对齐到线的中心
【发布时间】:2016-05-08 13:51:23
【问题描述】:

我有一个用 C# 编写的 Windows 应用程序,我想根据人们的分数对他们进行排名,分为 3 个级别;第一级得分最高的,第二级第二高的,第三级的。

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

【问题讨论】:

    标签: c# winforms listview


    【解决方案1】:

    不,如果没有owner-drawingListView,这是不可能的。

    原因是ShowGroups 属性。

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

    这里是如何修改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 both 在组和行中的数量而有所不同。

    因此您必须拥有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,您需要将它们全部删除到一个列表中,然后以新顺序重新添加它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 2017-08-22
      • 2022-12-15
      • 2012-01-08
      • 2018-02-20
      • 1970-01-01
      相关资源
      最近更新 更多