Как правильно выровнять элементы управления в StatusStrip?

93

Я пытаюсь правильно выровнять элемент управления в файле StatusStrip. Как я могу это сделать?

Я не вижу свойства для ToolStripItemэлементов управления, определяющего их физическое выравнивание по родительскому элементу StatusStrip.

Как сделать так, чтобы выпадающие сообщения были выровнены по правому краю? http://i.friendfeed.com/ed90b205f64099687db30553daa79d075f280b90

Эрик Шуновер
источник
4
Сделайте элемент панели инструментов метки со свойством Spring, установленным в значение true. Подробности: dotnetperls.com/statusstrip (PS Да, я знаю, что это старый вопрос.)
Ник Алексеев

Ответы:

230

Нашел на форумах MSDN почти сразу после публикации :)

Вы можете использовать элемент управления ToolStripLabelпсевдо-выравнивания по правому краю, задав для Textсвойства значение string.Emptyи задав для Springсвойства значение true. Это заставит его заполнить все доступное пространство и сдвинуть все элементы управления вправо от верхнего края ToolStripLabel.

Эрик Шуновер
источник
28
Это будет работать ТОЛЬКО если StatusStrip.LayoutStyle == ToolStripLayoutStyle.Table(что по умолчанию)
AZ.
14
Ницца. StatusStripLabel с Spring по обеим сторонам, кажется,
центрирует
Я бы хотел, чтобы это был «настоящий» способ, но он работает, поэтому спасибо. Интересно, что Alignmentделает свойство, потому что в моем приложении оно ничего не делало.
TheGateKeeper
2
Интересно, что делает свойство Alignment. Я не вижу такого свойства.
TaW,
Это позволит разрешить только один элемент после метки с «Spring», остальные не появятся, используйте вместо этого метод @VBobCat.
Пабло Карраско Эрнандес,
14

Для меня потребовалось два простых шага:

  1. Установить MyRightIntendedToolStripItem.AlignmentнаRight
  2. Установить MyStatusStrip.LayoutStyleнаHorizontalStackWithOverflow
VBobCat
источник
5

В качестве дополнительного примечания это связано с тем, что в Win32 API ячейка либо имеет фиксированную ширину, либо заполняет оставшееся пространство -1.

int statwidths[] = {100, -1};

SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM)statwidths);
SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Hi there :)");

Если мне не изменяет память, у вас может быть только одна ячейка заполнения (-1) на строку состояния.

Вы также можете добавить третью среднюю ячейку и присвоить ей свойство fill, чтобы получить более согласованный вид StatusBar. Последовательно, потому что у Messages есть вставка слева и справа там, где вы этого ожидали. Немного похоже на снимок mspaint, найденный на странице MSDN для StatusBars

Мне нравится творческий подход: D

Мартейн Лаарман
источник
Это справедливо для StatusBars, но не для StatusStrips, которые представляют собой полностью управляемый код.
Филип Навара,
3

Вы можете отобразить Buttonв конце StatusStrip, используя приведенную ниже логику.

  1. Добавить ToolstripLabelвStatusStrip
  2. Установить текст как string.Empty
  3. Набор PaddingдляToolstripLabel

Например:

this.toolStripStatusLabel1.Padding = new Padding((int)(this.Size.Width - 75), 0, 0, 0);
Чандран Р
источник
добавьте третью среднюю ячейку и задайте ей свойство fill. Я не вижу такого свойства.
TaW,
2

Сохраните метку Toolstrip, установите для свойства Spring значение true и для выравнивания текста метки в BottomLeft

Висах В.А.
источник
1

Я обнаружил, что вы можете установить для StatusStrip Layout значение HorizontalStackWithOverflow. Затем для каждого элемента управления на StatusStrip, который должен быть справа, установите для элемента управления Alignment значение Right.

Мне это нравится больше, так как вам не нужны дополнительные или фиктивные элементы управления для выравнивания.

рыцарь
источник
0

Если вы установите для свойства Spring элемента управления метки состояния значение true, то эта метка займет все пространство, не используемое другими элементами управления в StatusStrip.

Пакиярадж Ганешан
источник
Этот ответ уже дан. Отвечая на такой старый вопрос с большим количеством ответов, вам нужно проверить это заранее.
marsh-wiggle
-2

Я нахожу общий способ установить расположение элемента управления StatusStrip. Вы можете отобразить кнопку в любом месте в StatusStrip, выполнив следующие действия.

  1. Добавьте ToolstripLabel в StatusStrip
  2. Установите для текста подходящее количество места, например

    toolStripStatusLabel1.Text = "";

  3. Если макет не тот, который вам нужен, перейдите к шагу 2, чтобы изменить количество места toolStripStatusLabel1.Text, иначе работа будет выполнена.

Алан Аккарт
источник
-3

Установите для свойства полосы инструментов RightToLeft значение True.

ТрэвисХендриксон
источник