2015-05-13 3 views
1

У меня есть пользовательский элемент управления, который расширяется и сворачивается. У меня должно быть второе свойство «open width», которое должно быть задано отдельно от свойства обычной ширины.Свойство Значение по умолчанию не работает для нового элемента управления

Когда я сбрасываю элемент управления, он делает ширину 10. Когда я разворачиваю элемент управления, он возвращает ширину элемента управления обратно к свойству «open width», которое должно быть установлено вручную на обычную ширину, когда элемент управления создано.

По умолчанию новая ширина в элементе управления равна 200, поэтому для согласования я хочу установить для свойства по умолчанию «открытая ширина» значение 200. Поэтому у меня есть следующие:

Private _mSideBarOpenWidth As Integer 
<EditorBrowsable(EditorBrowsableState.Always)> 
<Browsable(True)> 
<DesignerSerializationVisibility(_ 
DesignerSerializationVisibility.Visible)> 
<DefaultValue(200)> 
<Category("SideBar")> 
<Description("Sets the open Width of the SideBar control.")> 
Public Property SideBarOpenWidth() As Integer 
    Get 
     Return _mSideBarOpenWidth 
    End Get 
    Set(value As Integer) 
     _mSideBarOpenWidth = value 
    End Set 
End Property 

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

cleaning/building/rebuilding the project 
closing VisualStudio and opening it back up 
deleting the form and creating a new one 
using the control in a new project 
setting <em>DesignerSerializationVisibility.Visible</em> to <em>.Content</em> 
using <em>"200"</em> with the quotes as the default value 

И различные комбинации из всех этих. Ничто из этого не работает, а значение по умолчанию для нового элемента управления, перетаскиваемого в форму, равно нулю. Излишне говорить, что я не понимаю, почему значение по умолчанию не будет установлено на 200, когда оно будет создано.

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

ответ

2

он просто не запустится на 200

Это не какой DefaultValue ... VS использует DefaultValue для определения того, отличается ли текущее значение от значения по умолчанию и поэтому должно быть сериализовано и показать значение свойства, выделенное жирным шрифтом в Property IDE. Он не устанавливает значение. Замечание от MSDN:

Атрибут DefaultValueAtribute не приведет к автоматическому инициализации элемента с его значением. Вы должны установить начальное значение в своем коде.

Attribute s предоставить информацию о класса, недвижимость и т.д. Ваша собственность не знает об атрибуте DefaultValue и они не взаимодействуют без кода, который вы добавляете.

Вместо этого они указывают информацию о классе или свойстве (и т. Д.) На другие вещи (дизайнеры, сериализаторы и т. Д.). Например, какие Editor или TypeConverter использовать. Хорошим примером являются атрибуты Description или Category - они предоставляют информацию о ваших свойствах VS, которые он использует на панели «Свойства» в среде IDE.

+0

И теперь я чувствую себя идиотом, что знаю, что я должен сначала установить значение по умолчанию ... Еще раз спасибо Плутоникс! – Recoil

+0

Учитывая имя, которое он * делает *, похоже, оно должно установить его, а потому, что это атрибут, а тем более. – Plutonix

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