vb. net usercontrol как обновить мою собственность - PullRequest
0 голосов
/ 06 января 2020

Я пишу usercontrol в VS 2019, однако, когда я устанавливаю свойство checked = true в окне свойств, в новом проекте Form_load, значение флажка не обновляется, окно отладки показывает false, но значение в окне свойств равно true

set checked in property window

checked is false

вот мой код контроля пользователя

Private CheckedValue As Boolean
Public Event CheckedChanged As PropertyChangedEventHandler
<Browsable(True),
EditorBrowsable(EditorBrowsableState.Always),
Category("Data"),
Description("checked"),
DefaultValue(True),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>
    Public Property Checked() As Boolean
        Get
            Return CheckedValue
        End Get
        Set(ByVal value As Boolean)
            CheckedValue = value
            RaiseEvent CheckedChanged(Me, New PropertyChangedEventArgs("Checked"))
        End Set
    End Property

По форме код:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Debug.Print(Chao_Switch1.Checked)
    'The Switch display **wrong**
End Sub

И если я установлю свойство в коде, значение будет правильным

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Chao_Switch1.Checked=True
    Debug.Print(Chao_Switch1.Checked)
    'The Switch display **right**
End Sub

Ответы [ 2 ]

1 голос
/ 06 января 2020

Я знаю, почему это происходит

установите DesignerSerializationVisibility.Content на DesignerSerializationVisibility.Visible

Неправильный код:

<Browsable(True),
EditorBrowsable(EditorBrowsableState.Always),
Category("Data"),
Description("description"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content)>

Правильный код:

<Browsable(True),
EditorBrowsable(EditorBrowsableState.Always),
Category("Data"),
Description("description"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)>
0 голосов
/ 06 января 2020

Я думаю, что вы можете быть запутаны между "значением по умолчанию" и "начальным значением". Этот атрибут DefaultValue фактически говорит вам, какое значение будет установлено для свойства, если вы щелкните его правой кнопкой мыши в конструкторе и выберите Сброс .

Если вы не установили его явно, любое свойство будет иметь значение по умолчанию для своего типа. Ваше свойство имеет тип Boolean, поэтому его начальное значение будет False, если вы не установите его иначе. Если вы не установите свойство, оно будет отражать начальное значение его вспомогательного поля. Вы не инициализируете вспомогательное поле, поэтому оно будет False. Если вы хотите, чтобы свойство изначально было True, то вам нужно инициализировать вспомогательное поле:

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