首页 > 解决方案 > 在winforms中放置一个Listview的标签顶部中心

问题描述

我正在用 winforms 开发一个软件,我被困在一个步骤中,我有一个标签放在 ListView 的顶部。

在程序运行期间,Label 的文本会发生变化。文本的长度可以是 loger 或更短。

例如,一次可能是“你好”,下一次是“你好,我的名字是……”。

我的问题是,是否可以根据表单中 ListView 的位置放置标签?

我希望标签始终位于 Listview 的顶部中心。

像这里所示:

                       Label
  [                   ListView                     ]

文字变化:

                       Hello
  [                   ListView                     ]

文字变化:

                 Hello My Name is Omar
  [                   ListView                     ]

我尝试将 Label 的 AutoSize 属性设置为 False,将 TextAlign 属性设置为 MiddleCenter,将 Dock 属性设置为 Fill。这对我不起作用,因为一旦我这样做了,一旦我运行该软件,我的表单就会消失一些图片。

标签: c#winformslistviewlabel

解决方案


这很容易。就在label TextChanged事件中,根据listView Location、Width和label Width重新定位label位置,计算差值除以2得到居中。

private void label1_TextChanged(object sender, EventArgs e)
        {
            label1.Location = new Point((listView1.Location.Y +listView1.Width - label1.Width) / 2, 
            label1.Location.Y);

        }

当标签中的文本发生更改时,这将使标签以 listView 为中心,因此它将始终居中。

当然,如果您想更改 Y 位置,您可以将 Location.Y 更改为您想要的任何点。像一个例子:你可以得到 listView Location y 然后得到标签 Height 来定义 Y 位置。

像 :

    label1.Location = new Point((listView1.Location.Y + listView1.Width - label1.Width) / 2,
 listView1.Location.Y - label1.Height -10);

这将计算 Y 轴上的 listView 位置并获取标签高度,然后添加一个空格 10。这将使标签位置保持在 listView 的顶部 +10,因此如果标签变为两行或 n 行,它将始终在listView的顶部不互相覆盖

这是结果:

在此处输入图像描述


推荐阅读