Измените поведение переполнения панели инструментов для динамически добавляемых элементов ToolStripPanel

StackOverflow https://stackoverflow.com/questions/604713

Вопрос

У меня есть панель инструментов Windows Forms, в которую я динамически добавляю новые панели инструментов.У каждой ToolStrip есть ToolStripItems, которые я динамически добавляю к ней (в основном ToolStripButtons).

Я бы хотел, чтобы все панели инструментов помещались в одной строке до тех пор, пока вы можете видеть все элементы ToolStripItems в каждой панели инструментов.Если добавление нового элемента ToolStripItem в ToolStrip вызывает переполнение, я бы хотел, чтобы ToolStrip в конце строки переходил к новой строке.Единственный раз, когда я хотел бы видеть кнопку переполнения, - это если на панели инструментов так много элементов, что они не могут поместиться по ширине формы.

Я хочу, чтобы это было поведение по умолчанию, если только пользователь вручную не переместит полосу инструментов.Если пользователь перемещает ToolStrip, то я хочу, чтобы существующее переполнение (напримеркнопка переполнения с выпадающим списком вариантов), которое должно произойти.Я предполагаю, что пользователя устроит это поведение переполнения Winforms по умолчанию, если он сам расположит панель инструментов.

Если новая динамическая панель инструментов добавляется после того, как пользователь перемещает элементы, я бы хотел, чтобы новая панель инструментов была добавлена справа от последней панели инструментов в нижней строке.Эта панель инструментов должна иметь обновленное поведение переполнения (напримериспользуйте новую строку, если вы не можете поместиться), пока пользователь вручную не переместит ее.

Я провел кое-какие исследования, но без особого успеха:

Я упускаю простое решение?

Обновить:Все еще ищу хорошее решение.Похоже, что планировка завершенного маршрута возможна.Однако проблема с ним заключается в том, что он вызывается несколько раз.Один раз он говорит, что ToolStripItem находится в области переполнения и сразу после этого находится в Основной области, поэтому не кажется безопасным просто проверять один раз, находится ли он в переполнении.

Это было полезно?

Решение 2

В конце концов, я не думаю, что есть хорошее простое решение. Этот поток дает понять, что TOOLSTRIPPS на самом деле не были предназначены в первую очередь для динамических сценариев.

Один уникальный подход заключается в установке параметров toolstrip'а Минимальный размер должен быть одинакового размера со всеми кнопками.Это начнет работать с переполнением, как я описываю, но даже при этом возникают проблемы с граничными случаями.

Лучший подход, который я нашел, - это сделать все возможное, чтобы заранее получить представление о том, каким должен быть размер панели инструментов, а затем расположить ее на панели инструментов, используя Присоединиться способ.Если вы заранее сделаете разумное предположение, то, вероятно, будет нормально, если вы добавите дополнительные кнопки позже, поскольку они окажутся в области переполнения.

Другие советы

1) Добавьте элементы в панель инструментов

2) Сравните ширину полосы инструментов с количеством свободного места, оставшегося в последней строке.Панель ToolStripPanel имеет свойство Rows[], которое сообщит вам, что такое последняя строка и какие полосы инструментов находятся в этой строке.Сложите их ширину и вычтите из ширины панели.

3) Добавьте новую панель инструментов на панель, используя метод объединения, указав либо последнюю строку (если она подходит), либо на одну строку выше (если не подходит).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top