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

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

Я загрузил снимок экрана, чтобы проиллюстрировать проблему. Пользовательский элемент управления, содержащий метку и индикатор выполнения, выделен красным цветом, а пользовательский элемент управления, содержащий панель макета потока, — зеленым.


person Simon Morgan    schedule 17.06.2009    source источник
comment
Источник проблемы, по-видимому, заключается в том, что добавление элементов управления в FlowLayoutPanel, для которых FlowDirection установлено значение TopDown, приведет к их исчезновению, если их свойство Dock установлено на Top или их свойство Anchor установлено на AnchorStyles.Left | AnchorStyles.Right.   -  person Simon Morgan    schedule 17.06.2009


Ответы (3)


Я думаю, проблема в том, что вы на самом деле не хотите, чтобы элементы управления «потоком», вы просто хотите, чтобы они занимали самую верхнюю позицию в вашем элементе управления хостом. Вы можете получить нужные результаты, просто используя вместо этого обычный элемент управления Panel. Просто добавьте дочерние пользовательские элементы управления в коллекцию Controls элемента управления контейнера, а затем установите для Dock добавленного пользовательского элемента управления значение «Top».

        ChildDisplay dsp1 = new ChildDisplay();
        pnlHost.Controls.Add(dsp1);
        dsp1.Dock = DockStyle.Top;

        ChildDisplay dsp2 = new ChildDisplay();
        pnlHost.Controls.Add(dsp2);
        dsp2.Dock = DockStyle.Top;

        ChildDisplay dsp3 = new ChildDisplay();
        pnlHost.Controls.Add(dsp3);
        dsp3.Dock = DockStyle.Top;

Примечание. Замените [ChildDisplay] любым именем используемого вами UserControl.

person Ehz    schedule 01.07.2009

Просто установите для свойства Dock пользовательского элемента управления значение «Верх»...

UserControl.Dock = System.Windows.Forms.DockStyle.Top;
person Bluestone    schedule 17.06.2009
comment
Установка для свойства Dock значения Top в конструкторе пользовательского элемента управления делает их невидимыми — все, что я получаю, — это зеленая панель макета потока. - person Simon Morgan; 17.06.2009

Позиционирование и наслоение элементов управления иногда может быть сложным. Убедитесь, что для свойства Dock зеленого элемента управления потоком установлено значение Fill. После этого начните размещать элементы управления надписями и начинайте позиционировать. Вы можете установить для свойства Dock значение Top, если хотите, но я не большой поклонник этого в большинстве ситуаций. Я бы сказал, что при настройке положения элементов управления, особенно при использовании свойства Dock, следует помнить, что порядок имеет значение. Если вы не видите элемент управления (то есть... кажется, что он скрыт за другими элементами управления), попробуйте изменить порядок их добавления в родительский элемент (в данном случае панель управления потоком). Если вы используете конструктор в VS, вы можете сделать это, щелкнув правой кнопкой мыши и используя команды «Отправить вверх/вниз» (очень полезно при использовании свойства Dock, кроме того, вы также можете увидеть, какие элементы управления расположены в том месте, где вы щелкаете ).

Кроме того, на мой взгляд, часто упускаемым из виду вариантом является правильное использование Control.Anchor. Я бы посоветовал его посмотреть.

person Zensar    schedule 17.06.2009