c sharp哪个控件可以实现在容器中滑动列表,并放置进度条(多个),上下滚动的信息
时间: 2024-05-16 22:15:55 浏览: 163
在C#中,可以使用 `ListBox` 控件来实现在容器中滑动列表的功能,并使用 `ProgressBar` 控件来实现进度条的显示。如果需要在列表中显示多个进度条,可以考虑自定义 `ListBox` 控件来实现该功能。
下面是一个示例代码,演示了如何在 `ListBox` 控件中添加多个进度条并实现滚动显示:
```csharp
// 创建一个自定义的 ListBox 控件
public class MyListBox : ListBox
{
// 用于存储所有进度条的列表
private List<ProgressBar> progressBars = new List<ProgressBar>();
public MyListBox()
{
// 设置列表样式为滚动条自动出现
this.ScrollAlwaysVisible = true;
this.HorizontalScrollbar = false;
}
// 添加一个新的进度条到列表中
public void AddProgressBar()
{
ProgressBar progressBar = new ProgressBar();
progressBar.Minimum = 0;
progressBar.Maximum = 100;
progressBar.Value = 0;
// 将进度条添加到列表中,并设置其位置和大小
this.Controls.Add(progressBar);
progressBar.Top = this.ClientSize.Height + progressBar.Height;
progressBar.Left = 0;
progressBar.Width = this.ClientSize.Width;
// 将进度条保存到列表中
progressBars.Add(progressBar);
}
// 更新所有进度条的值
public void UpdateProgressBars(int[] values)
{
for (int i = 0; i < progressBars.Count; i++)
{
if (i < values.Length)
{
progressBars[i].Value = values[i];
}
else
{
progressBars[i].Value = 0;
}
// 更新进度条的位置
progressBars[i].Top = i * progressBars[i].Height - this.TopIndex * progressBars[i].Height;
}
}
// 重写 OnResize 方法来更新所有进度条的位置
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
foreach (var progressBar in progressBars)
{
progressBar.Width = this.ClientSize.Width;
progressBar.Top = progressBar.Top + progressBar.Height - this.ClientSize.Height;
}
}
// 重写 OnDrawItem 方法来绘制列表项
protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);
e.DrawBackground();
e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
}
}
```
使用时,可以通过 `AddProgressBar` 方法添加进度条,通过 `UpdateProgressBars` 方法更新进度条的值。例如:
```csharp
MyListBox listBox = new MyListBox();
listBox.Dock = DockStyle.Fill;
this.Controls.Add(listBox);
// 添加三个进度条
listBox.AddProgressBar();
listBox.AddProgressBar();
listBox.AddProgressBar();
// 定时更新进度条的值
Timer timer = new Timer();
timer.Interval = 100;
timer.Tick += (sender, e) =>
{
int[] values = new int[] { (int)(DateTime.Now.Ticks % 100), (int)((DateTime.Now.Ticks / 1000) % 100), (int)((DateTime.Now.Ticks / 1000000) % 100) };
listBox.UpdateProgressBars(values);
};
timer.Start();
```
这样就可以在容器中滚动显示多个进度条了。
阅读全文