我正在使用winforms开发一个软件,我遇到了一个标签放在ListView顶部的步骤。
在程序运行期间,Label的文本已更改。该文本可以记录更长或更短。
例如,它可能是"你好"一次又一次"你好,我的名字是......"。我的问题是,是否可以根据表单中ListView的位置放置标签?
我希望标签始终位于Listview的顶部中心。
如下所示:
Label
[ ListView ]
文字更改:
Hello
[ ListView ]
文字更改:
Hello My Name is Omar
[ ListView ]
我尝试将Label的AutoSize属性设置为False,将TextAlign属性设置为MiddleCenter,将Dock属性设置为Fill。一旦我这样做,这对我来说不起作用,一旦我运行软件,我的表格就会从我的表格中消失。
答案 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的顶部而不会相互遮挡
结果如下:
答案 1 :(得分:1)
您可以利用 Designer 来满足要求,而无需在设计时编写代码:
使用标签与中心对齐的标签
Label
和ListView
放在同一个容器中。TextAlign
的{{1}}属性设置为Label
MiddleCenter
的{{1}}属性设置为AutoSize
Label
的{{1}}属性设置为false
Dock
的{{1}}属性设置为Label
使用TabelLayoutPanel
Top
:Dock
放在第一行,并将其ListView
设置为无。Fill
的{{1}}属性设置为默认设置的TableLayoutPanel
。Label
放在第二行,并将其Anchor
设置为顶部,左侧,底部和右侧。