StatusStrip 中的多个进度条

Multiple Progress Bars in StatusStrip

我有一个应用程序,其中可能有多个冗长(分钟)的任务在后台同时发生(即不同帐户的相同任务,一些帐户比其他帐户花费更长的时间)。我想同时显示每个任务的进度条和状态文本。我想我可以在不同的 window 中显示,如果有很多这样的帐户,但现在的情况只是有 2-4 个帐户,因此我想在 StatusStrip 中显示进度条主窗体的底部。我认为 StatusStrip 应该长大,我会根据在任何给定时间处理的帐户数量动态地添加 ToolStripProgressBar 和 ToolStripStatusLabel。这可能吗?我正在考虑在 StatusStrip 中使用 TableLayoutPanel,但是 Visual Studio 设计器只允许将很少的组件添加到 StatusStrip。我以编程方式添加这个有什么问题吗?

可能这不是智能 UI 设计,但仅供参考,您可以使用 ToolStripControlHost 添加任何控件。这是一个简单的示例,它允许您使用代码在 StatusStrip 的单个项目中添加多个 StatusBar 控件:

ToolStripControlHost host;
FlowLayoutPanel panel;
private void button1_Click(object sender, EventArgs e)
{
    if (panel == null)
    {
        panel = new FlowLayoutPanel();
        panel.FlowDirection = FlowDirection.TopDown;
        panel.WrapContents = false;
        panel.AutoSize = true;
        panel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
    }
    if (host == null)
    {
        host = new ToolStripControlHost(panel);
        this.statusStrip1.Items.Add(host);
    }
    panel.Controls.Add(new ProgressBar() { /* Value = new Random().Next(0, 100) */ });
}

注意: 您还可以扩展 ToolStripControlHost 以提供 design-time 支持,为此请查看 How to: Wrap a Windows Forms Control with ToolStripControlHost