Ограничить размеры изменяемого размера пользовательского элемента управления (c # .net) - PullRequest
3 голосов
/ 22 июня 2010

Я делаю пользовательский элемент управления в MS Visual C #, и есть одна вещь, на которую я просто не могу найти ответ:

Как ограничить размеры, на которые можно изменять размеры элемента управления во время проектированияview?

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

Я попытался установить значения MinimumSize и MaximumSize в конструкторе для моего элемента управления, но это не дает идеальных результатов.

Ответы [ 3 ]

3 голосов
/ 22 июня 2010

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

Это огромная тема, так как вы можете многое сделать. По сути, вы должны создать класс, который наследует от ControlDesigner, переопределить любую нужную вам функциональность, а затем зарегистрировать его в своем пользовательском элементе управления с помощью DesignerAttribute, указав typeof(IDesigner) для второго параметра (и свой собственный ControlDesigner- производный тип для первого).

Улучшенная поддержка времени разработки
Дизайнеры по индивидуальным заказам
Пример класса ControlDesigner
Пользовательские функции управления во время разработки в Visual Studio .NET

Теперь, в случае TrackBar, у него есть собственный конструктор, который переопределяет свойство ControlDesigner.SelectionRules . Это свойство просто позволяет вам возвращать значение перечисления (это перечисление Flags, поэтому вы можете ИЛИ их вместе), указывающее, как отображаются (или не появляются) ваши элементы выбора во время разработки. После того, как вы изменили изменение размера во время разработки с помощью дизайнера, вы можете сами управлять своим размером vai SetBoundsCore .

.
1 голос
/ 22 июня 2010

Я не уверен в квадрате изменения размера, но MaximunSize и MinimumSize - правильные значения для вас. Но недостаточно установить их в конструкторе вашего класса, потому что каждый раз, когда вы переносите экземпляр вашего элемента управления из конструктора в форму, эти значения устанавливаются после конструктора.

Вы должны:

переопределяет MinumumSize и MaximumSize, и net устанавливает базовое значение из вашего значения, но не из вашего значения.

private Size maxSize = new Size(100, 5);
public override Size MaximumSize
{
    get { return base.MaximumSize; }
    set { base.MaximumSize = maxSize; }
}

создайте публичный метод в вашем классе:

public bool ShouldSerializeMaximumSize()
{
    return false;
}

и

private void ResetMaximumSize()
{
    me.MaximumSize = maxSize;
}

Эти методы являются соглашением от Windows Forms Desinger: http://msdn.microsoft.com/en-us/library/53b8022e.aspx

1 голос
/ 22 июня 2010

Я вполне уверен, что вы можете сделать это с Control.SetBoundsCore, как описано здесь. текст ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...