Как запретить сериализацию DataBindings Inherited Control в конструкторе форм - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь создать пользовательский элемент управления, унаследовав его, чтобы расширить его функциональность. Я создал простой тест для воспроизведения этой проблемы. Моя проблема заключается в том, что привязка данных сериализуется в файл designer.vb.

Есть ли способ предотвратить это? Пожалуйста, смотрите мой пример кода ниже.

Public Class CustomTextBox
Inherits Windows.Forms.TextBox
Implements System.ComponentModel.INotifyPropertyChanged


Private _myCustomProperty As Boolean


Public Sub New()
    Me.DataBindings.Add(New Windows.Forms.Binding("MyCustomProperty", My.Settings, "TestBoolean", True, Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
End Sub


Public Event PropertyChanged As ComponentModel.PropertyChangedEventHandler Implements ComponentModel.INotifyPropertyChanged.PropertyChanged


<ComponentModel.Browsable(False)>
<ComponentModel.Bindable(True)>
<ComponentModel.DesignerSerializationVisibility(ComponentModel.DesignerSerializationVisibility.Hidden)>
Public Property MyCustomProperty As Boolean
    Get
        Return Me._myCustomProperty
    End Get
    Set
        If Me._myCustomProperty = Value Then
            Return
        End If
        Me._myCustomProperty = Value
        RaiseEvent PropertyChanged(Me, New ComponentModel.PropertyChangedEventArgs(NameOf(Me.MyCustomProperty)))
    End Set
End Property


End Class

Когда я добавляю CustomTextBox к форме, VisualStudio автоматически добавляет следующее в файл designer.vb формы.

    '
    'CustomTextBox1
    '
    MySettings1.SettingsKey = ""
    MySettings1.TestBoolean = False
    Me.CustomTextBox1.DataBindings.Add(New System.Windows.Forms.Binding("MyCustomProperty", MySettings1, "TestBoolean", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
    Me.CustomTextBox1.Location = New System.Drawing.Point(483, 13)
    Me.CustomTextBox1.Name = "CustomTextBox1"
    Me.CustomTextBox1.Size = New System.Drawing.Size(100, 26)
    Me.CustomTextBox1.TabIndex = 3

Когда я Запустите форму, я получу исключение.

enter image description here

Я понимаю, почему я получаю исключение. Designer.vb создает привязку данных, а CustomTextBox также пытается создать привязку данных. Я пытался добавить Me.Databindings.Clear() перед добавлением привязки данных в унаследованном элементе управления.

Есть ли способ предотвратить добавление привязки данных в файл desginer.vb?

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