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

У нас есть класс, который автоматически масштабирует все элементы управления в форме, когда пользователь изменяет размер формы. Все, что нужно, это создать экземпляр класса в форме один раз при загрузке формы (установить и забыть).

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

Я думаю об изменении этого компонента, который можно удалить из формы. Я думаю, что это позволит мне захватить настройки дизайнера, как это происходит в InitializeComponents(), чтобы вам не пришлось забирать их позже при загрузке формы.

Однако у меня нет опыта работы с UserControls.

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

Может ли кто-нибудь указать мне на какой-нибудь учебник, который расскажет мне о поддержке времени разработки и о том, как это сделать?

Я также ищу (менее важно), чтобы ограничить этот элемент управления только на форме.

EDIT: я не ищу решения для масштабирования. Я хочу знать, как установить свойства пользовательского элемента управления во время разработки, чтобы они были привязаны к другому свойству элемента управления (изменение по мере изменения этого элемента управления) во время разработки.


person Fragilerus    schedule 07.03.2011    source источник
comment
Это похоже на то, о чем следует позаботиться, установив Anchor и Dock и используя соответствующие элементы управления контейнером. Или это другой вид масштабирования?   -  person Blorgbeard    schedule 08.03.2011
comment
Я полагаю, вы говорите о Winforms?   -  person John Saunders    schedule 08.03.2011
comment
Я добавляю свойства привязки и стыковки в сочетании с Panel, FlowPanel и TableLayoutPanel.   -  person Ritch Melton    schedule 08.03.2011


Ответы (1)


Согласно комментарию @Blorgbeard - похоже, вам, вероятно, следует использовать привязку/стыковку вместе с некоторыми удобными элементами управления макетом (FlowPanel/TableLayoutPanel). В качестве альтернативы в SetBoundsCore можно выполнять более сложные операции по изменению размера, которые, как я полагаю, обеспечат вам поддержку изменения размеров как во время выполнения, так и во время разработки:

    protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
    {
        // TODO: override parameter values (if in the specified set) with whatever values
        // that you calculate them to be. E.g. lock it as fixed width

        base.SetBoundsCore(x, y, width, height, specified);

        // TODO: update the size of child controls accordingly. 
    }

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

person Reddog    schedule 08.03.2011