Как правильно выровнять элементы управления в 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

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, иначе работа будет выполнена.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.