C#: Как получить пользовательский элемент управления к правильно автоматическому размеру самому

Чтобы постараться не создавать чрезмерное количество записей в единственном каталоге, можно хотеть основывать каталоги создания на частях имени файла. Так, например, если у Вас есть файл, названный d7f5ae9b7c5a.png, можно хотеть сохранить его в media/d7/f5/d7f5ae9b7c5a.png. Если Ваши имена файлов будут все шестнадцатеричными тогда, то это ограничит количество записей в единственном каталоге к 256 вплоть до заключительного уровня.

22
задан Svish 31 August 2009 в 07:24
поделиться

5 ответов

Спасибо за все предложения. На этот раз решение, похоже, установило для AutoSize значение true как для FlowLayoutPanel , так и для самого UserControl .

Теперь , как получить форму, которая будет содержать этот UserControl , а также некоторые другие элементы управления, которые я пока не могу понять, но думаю, это должен быть отдельный вопрос ...

11
ответ дан 29 November 2019 в 05:45
поделиться

Вы можете использовать свойство Anchor- and Dock объекта UserControl для установки параметров, чтобы края вашего элемента управления «приклеивались» к некоторым другим частям вашего UI. При изменении размера пользовательского интерфейса ваш элемент управления будет следовать за ним!

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

5
ответ дан 29 November 2019 в 05:45
поделиться

Заключение FlowLayoutPanel в TableLayoutPanel позволит обеспечить правильное автоматическое изменение размера.

Ваш UserControl должен выглядеть следующим образом :

UserControl
    TableLayoutPanel (Dock-Fill)
        Row1 : Label
        Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize)
        Row3 : Panel

Опять же, при использовании этого UserControl , возможно, вам придется заключить его в TableLayoutPanel , используя строку или столбец AutoSize .

Следите за SplitContainers , поскольку они часто нарушают баланс поведения при автоматическом изменении размера.

2
ответ дан 29 November 2019 в 05:45
поделиться

Я обнаружил, что лучший способ решить эту проблему - использовать некоторый код в событии ControlAdded на панели flowlayout, чтобы отрегулировать высоту панели (высоту, потому что вы использовали поток TopDown), чтобы be:

e.Control.Location.Y + e.Control.Height + some margin

и установить для свойства AutoSize самого пользовательского элемента управления значение True.

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

Эта функция может быть инкапсулирована в ваш собственный элемент управления, унаследованный от FlowLayoutPanel и переопределяющий метод ControlAdded.

0
ответ дан 29 November 2019 в 05:45
поделиться

При добавлении элемента управления в схему потока вы можете изменить размер уже добавленных элементов управления до необходимого размера, не используя полосы прокрутки для панели макета потока. L

0
ответ дан 29 November 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: