StatusStrip中的多个进度条

时间:2017-02-03 15:42:48

标签: c# multithreading winforms progress-bar statusstrip

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

1 个答案:

答案 0 :(得分:1)

可能它不是智能UI设计,但只是为了您的信息,您可以使用ToolStripControlHost添加任何控件。这是一个简单的示例,可让您使用代码在StatusBar的单个项目中添加多个StatusStrip控件:

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) */ });
}

enter image description here

注意:您也可以扩展ToolStripControlHost以提供设计时支持,为此,请查看How to: Wrap a Windows Forms Control with ToolStripControlHost