У меня есть панель инструментов Windows Forms ToolStripPanel, в которую я динамически добавляю новые ToolStrips. Каждый ToolStrip имеет ToolStripItems, которые я динамически добавляю к нему (в основном ToolStripButtons).
Я бы хотел, чтобы все ToolStrips помещались в одну строку, если вы можете видеть все ToolStripItems в каждой ToolStrip. Если добавление нового ToolStripItem в ToolStrip вызывает переполнение, я бы хотел, чтобы ToolStrip в конце строки перепрыгивал на новую строку. Единственный раз, когда я хотел бы видеть кнопку переполнения, это если ToolStrip имеет так много элементов, что они не помещаются по ширине формы.
Я хочу, чтобы это было поведение по умолчанию, если пользователь не перемещает ToolStrip вручную. Если пользователь перемещает ToolStrip, то я хочу, чтобы существующее поведение переполнения (например, кнопка переполнения с выпадающим выбором) происходило. Я предполагаю, что пользователь будет в порядке с этим поведением переполнения Winforms по умолчанию, если они сами размещают панель инструментов.
Если новая динамическая панель инструментов добавляется после того, как пользователь перемещает объекты, я бы хотел, чтобы новая панель инструментов была добавлена справа от последней ToolStrip в нижнем ряду. Эта панель инструментов должна иметь обновленное поведение при переполнении (например, использовать новую строку, если вы не можете уместить), пока пользователь не переместит ее вручную.
Я провел некоторые исследования без большого успеха:
- Похоже, что изменение простого ToolStripLayoutStyle должно быть простым делом, но, похоже, это не так. (В лучшем случае новые строки создаются, когда кнопка переполнения отображается на всех всплывающих подсказках в данной строке).
- Статья MSDN " Как: управлять переполнением ToolStrip в Windows Forms ", по-видимому, охватывает только если / когда появляется кнопка переполнения.
- В ToolStrip есть событие LayoutCompleted , которое, по-видимому, можно использовать для настройки, кажется, что должен быть более простой способ.
- Создание собственного LayoutEngine кажется излишним, поскольку встроенный очень близок к тому, что я хочу сделать.
Мне не хватает простого решения?
ОБНОВЛЕНИЕ: Все еще ищите хорошее решение. Похоже, маршрут LayoutCompleted возможен. Однако проблема в том, что он вызывается несколько раз. Однажды он говорит, что ToolStripItem находится в области переполнения, а сразу после этого - в области Main, так что не кажется безопасным просто один раз проверить, находится ли он в переполнении.