在winforms中放置Listview的标签顶部中心

时间:2018-06-18 12:36:43

标签: c# winforms listview label

我正在使用winforms开发一个软件,我遇到了一个标签放在ListView顶部的步骤。

在程序运行期间,Label的文本已更改。该文本可以记录更长或更短。

例如,它可能是"你好"一次又一次"你好,我的名字是......"。

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

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

如下所示:

                       Label
  [                   ListView                     ]

文字更改:

                       Hello
  [                   ListView                     ]

文字更改:

                 Hello My Name is Omar
  [                   ListView                     ]

我尝试将Label的AutoSize属性设置为False,将TextAlign属性设置为MiddleCenter,将Dock属性设置为Fill。一旦我这样做,这对我来说不起作用,一旦我运行软件,我的表格就会从我的表格中消失。

2 个答案:

答案 0 :(得分:1)

这很简单。 只需在标签TextChanged事件中,根据listView位置,宽度和标签宽度重新定位标签位置,并计算差值,将其除以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行,它' ll总是位于listView的顶部而不会相互遮挡

结果如下:

enter image description here

答案 1 :(得分:1)

您可以利用 Designer 来满足要求,而无需在设计时编写代码:

使用标签与中心对齐的标签

  • LabelListView放在同一个容器中。
  • TextAlign的{​​{1}}属性设置为Label
  • MiddleCenter的{​​{1}}属性设置为AutoSize
  • Label的{​​{1}}属性设置为false
  • Dock的{​​{1}}属性设置为Label

使用TabelLayoutPanel

  • 使用两行Top
  • Dock放在第一行,并将其ListView设置为无。
  • Fill的{​​{1}}属性设置为默认设置的TableLayoutPanel
  • Label放在第二行,并将其Anchor设置为顶部,左侧,底部和右侧。