2010-06-22 3 views
2

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

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

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

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

+0

Что случилось с MinimumSize и MaximumSize? –

+0

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

ответ

3

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

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

Enhancing Design-time Support
Custom Designers
ControlDesigner class example
Custom Design-time Control Features in Visual Studio .NET

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

+0

Я также рекомендую загрузить Reflector. Рассматривая исходный код TrackBar (и связанный с ним TrackBarDesigner), вы можете собрать все, что нужно, чтобы получить нужное поведение. –

+0

Спасибо за ответ, это работает блестяще. –

1

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

1

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

Вы должны:

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

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

Смежные вопросы