c# - 在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。这对我不起作用,因为一旦我这样做了,一旦我运行该软件,我的表单就会消失一些图片。
解决方案
这很容易。就在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的顶部不互相覆盖
这是结果:
推荐阅读
- c# - Web API HTTPGet 用于多个属性?
- windows-runtime - 我应该如何在 cppwinrt 中将 AddHandler 与 Handler 对象一起使用?
- r - 评估分段函数(曲线错误(...,:'expr' 未评估为长度为 'n' 的对象)
- react-native - React Native - 背景图像应与文本一起滚动
- excel - 使用目标 vba 按值粘贴特殊值
- python - 为什么我的对象不在我告诉它留下的同一个地方
- git - 从拉取请求 Git 中删除目录
- python - 计算每组前 n 行的总和
- gnuplot - 超文本可以与 Gnuplot 中的 pm3d 曲面图一起使用吗?
- java - JOOQ 获取外键表