2017-02-03 13 views
1

У меня есть приложение, в котором может быть несколько длинных (минут) задач, выполняющихся одновременно в фоновом режиме (т. Е. Одна и та же задача для разных учетных записей, причем некоторые учетные записи занимают больше времени, чем другие). Я хотел бы показать индикатор выполнения и текст состояния для каждой задачи параллельно. Я предположил, что могу показать это в другом окне, если таких учетных записей было много, но на данный момент сценарий состоит только из 2-4 учетных записей, поэтому я хотел бы показать индикаторы выполнения в StatusStrip в нижней части основного форма. Я думаю, что StatusStrip должен вырасти, и я добавлю ToolStripProgressBar и ToolStripStatusLabel один над другим динамически, исходя из количества обрабатываемых учетных записей в любой момент времени. Это возможно? Я думал об использовании TableLayoutPanel внутри StatusStrip, но дизайнер Visual Studio допускает добавление в StatusStrip очень небольшого количества компонентов. Есть ли проблема со мной, добавляя эту программу?Несколько контрольных басов в StatusStrip

+0

@RezaAghaei, почему вы удалили свой ответ, я надеялся попробовать его скоро. – Jimmy

+0

Потому что я не получил никакого ответа после того, как я спросил * Разве это не то, что вы имеете в виду? * Но если вас интересует Я верну его снова. –

+0

Извините, я хотел попробовать, прежде чем комментировать ответ. Спасибо за восстановление. Это действительно то, что я имел в виду. – Jimmy

ответ

1

Возможно, это не интеллектуальный дизайн пользовательского интерфейса, но только для вашей информации вы можете добавить любой элемент управления, используя 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.