先见ProgressBar插入ListView中去。
progressBar = new Progressbar();
Rectangle rect = item.SubItems[2].Bounds;
progressBar.Size = new Size(rect.Width, rect.Height);
progressBar.Top = rect.Top;
progressBar.Left = rect.Left;
并在ListView的ColumnWidthChanged事件中添加如下代码:
Rectangle rect = this.lstViewFiles.Items[0].SubItems[2].Bounds;
foreach (ProgressBar bar in this.lstViewFiles.Controls)
{
bar.Width = rect.Width;
bar.Left = rect.Left;
}
我们发现,当ListView出现滚动条时,Progressbar无法移动,我们得重新修改下ListView。
首先,创建一个名为ListViewExtensions的类,该类继承于ListView,类中包含一个ListView所在窗口类的引用,并在类中重写WndProc方法。
public class ListViewExtension : ListView
{
/// <summary>
/// Upload Form
/// </summary>
private UploadForm uploadForm;
/// <summary>
/// Cotr
/// </summary>
/// <param name="from">UploadForm</param>
public ListViewExtension(UploadForm from)
{
uploadForm = from;
}
/// <summary>
/// WndProc
/// </summary>
/// <param name="m">Message</param>
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == 0x0114 || m.Msg == 0x0115)
{
Rectangle rect = this.Items[0].SubItems[2].Bounds;
this.BeginUpdate();
//移动ProgressBar的位置
foreach (ProgressBar bar in this.Controls)
{
bar.Left = rect.Left;
bar.Width = rect.Width;
}
this.EndUpdate();
}
}
}
效果图如下: