Якорь ToolStripProgressBar справа от StatusBar (StatusStrip) - PullRequest
10 голосов
/ 14 октября 2009

У меня есть форма со строкой состояния, которая имеет 2 ToolStripStatusLabel с, за которыми следует ToolStripProgressBar. Я хочу, чтобы индикатор выполнения был всегда привязан справа от строки состояния - поэтому, когда окно изменяется или увеличивается, оно должно автоматически перемещаться / перерисовывать.

Я подумал, что это будет так же просто, как установить для 1-го (выровненного по левому краю) ToolStripStatusLabel 's Spring свойство значение true, поэтому, когда размер формы изменяется / увеличивается, и появляется больше свободного места, 1-й ToolStripStatusLabel заполнит это место и автоматически толкнет ToolStripProgressBar вправо.

Но это не только то, что я хочу - 1-й ToolStripStatusLabel на самом деле покрывает и 2-й StatusLabel и ProgressBar, в основном занимая всю строку состояния. Ни один из элементов управления ToolStrip не имеет привязки или даже MinSize.

ТАК, как мне:

  1. Прикрепите ToolStripProgressBar справа от StatusBar (StatusStrip)
  2. Смешайте фиксированный размер элементов (например, ToolStripStatusLabel2 и ToolStripProgressBar) с переменным размером ToolStripStatusLabel1, который увеличивается при наличии дополнительного пространства?

Заранее спасибо за ваше время и помощь!

~ IM

Ответы [ 4 ]

14 голосов
/ 17 марта 2011

Есть простое решение. Сделайте один фальшивый ToolStripStatusLabel, очистите .Text и установите .Spring = true;

После этого добавьте свой ToolStripProgressBar. Убедитесь, что в заказе сначала указан ярлык, а затем индикатор выполнения.

5 голосов
/ 21 октября 2018
  1. Установите для свойства StatusStrip, LayoutStyle значение HorizontalStackWithOverflow.
  2. Установите Alignment элемента управления вправо для элемента управления, который вы хотите, чтобы быть справа.
4 голосов
/ 26 октября 2009

Для всех, кому это может быть интересно. Свойство Anchor доступно, хотя только в Code (не в дизайнере) ... но в любом случае оно НЕ работает .. Я оставил ошибку в Connect и получил общий WillNotFix с сообщением, которое, кажется, указывает на то, что они рассмотрят его только для серьезной ревизии.

По какой-то причине свойство Spring кажется ошибочным. В моих ультрапростых примерах это работает, но в некоторых других, где я делаю некоторые пользовательские рисования (но в Child Forms в MDIPArent, причем последнее имеет ht eStatusBar) это не так. В этих случаях все же есть простой обходной путь - в событии ReSize MDIParent Form (у которого есть строка состояния) измените размер StatusLabel, чтобы сделать его больше в той же пропорции, что и изменение ширины, поэтому он выдвигает ProgressBar к правому краю строки состояния

3 голосов
/ 08 апреля 2013

Сначала измените AutoSize на false

toolStripProgressBar.AutoSize = false;

Затем подпишитесь на событие statusStrip, которое изменило размер

statusStrip1.SizeChanged += statusStrip1_SizeChanged;

Окончательно изменить ширину полосы в обработчике событий

private void statusStrip1_SizeChanged(object sender, EventArgs e)
{
   toolStripProgressBar.Width = statusStrip1.Width - 95;
}
...