我有一个包含一些行的列表视图,并且所有行都有一个progressBar。
调整列宽效果很好(如设计所示),但是,由于它可以轻松地移动行内的文本,因此不会移动进度条、调整其大小或甚至四处移动。
private void fileList_ColumnWidthChanged(object sender, ColumnWidthChangedEventArgs e)
{
foreach (CustomProgressBar p in fileList.Controls.OfType<CustomProgressBar>().ToList())
{
if (e.ColumnIndex == 0)
{
p.Width = fileList.Columns[3].Width;
p.Left = fileList.Columns[e.ColumnIndex].Width + 400;
}
else if (e.ColumnIndex == 1)
{
p.Width = fileList.Columns[3].Width;
p.Left = fileList.Columns[e.ColumnIndex].Width + 227;
}
}
}
我想不通,所以这是我唯一的解决办法......“部分有效”。
初始-尚未调整大小x1c 0d1x
第1列已调整大小
常规列大小调整(无特定顺序)
关于根据列位置或宽度自动正确对齐项目,我是否遗漏了什么?
我写的代码在第二列之后没有效果,因为我不能确认它是否在第一列/第二列开始时正确工作。所以我看不出实现它的其余部分有什么意义,如果它设置为失败的话。
任何帮助都是感激不尽的。
.NET框架4.8 / WinForms
**注意:**ProgressBar会回应所有一般的progressBar属性。不同之处只是覆迭的阴影和色彩。仅此而已。
2条答案
按热度按时间laik7k3q1#
您可以将ListView的OwnerDraw属性设置为true。然后自定义子项的绘制,并为特定列绘制ProgressBar。若要绘制ProgressBar,可以使用ProgressBarRenderer或您自己的自定义绘制逻辑。
示例
代码的亮点:
代码如下:
42fyovps2#
依赖于所有者描述的ListView(我在另一个答案中分享过)是一个更好的主意;但是,对于出于任何原因而无法更改其解决方案的用户,这里提供了一个解决方案,该解决方案基于将ProgressBar控件添加到Listview并根据子项位置和大小调整控件位置。
示例
代码亮点:
代码如下: