Проблема с заданным связанным свойством в конструкторе в первый раз

StackOverflow https://stackoverflow.com/questions/1637844

Вопрос

Я разрабатываю конструктор форм, а также разрабатываю некоторые пользовательские элементы управления, которые наследуются от стандартного элемента управления, например button.

Кроме того, у меня есть некоторое связанное свойство, например, пользователь должен сначала выбрать отдел, а затем выбрать персону.и после того, как пользователь выбирает person, я устанавливаю текст моего пользовательского элемента управления (который в данном случае наследуется от button).
Примечание:пользователь может изменить свойство Text.

Все работает правильно, но когда я загружаю элемент управления из базы данных или перетаскиваю его в конструктор форм, текст ControlName # устанавливается,

После переопределения свойства Text и его отладки я вижу, что текст установлен правильно, но после установки моего текста дизайнер установил text с ControlName #, что это неправильно.

Как решить эту проблему ?

Заранее благодарю
Хамид

Это было полезно?

Решение

Существуют атрибуты, которые вы можете применить к своим свойствам, такие как ReadOnly это также помешает дизайнеру настроить ваше свойство.

На данный момент я не могу найти ссылку, но есть также способ сообщить разработчику форм, что он должен устанавливать свойства в определенном порядке.


Редактировать:

Ладно, не совсем таким, каким я его запомнил, но я думаю, что что-то вроде ISupportInitialize (Поддержка инициализации) интерфейс.

Что -то вроде:

Public Class Test
    Implements ISupportInitalise

    private _numberOne as integer
    private _numberTwo as integer
    private _initalised as boolean

    Public Property NumberOne() as Integer
        Get
            return _numberOne
        End Get
        Set(value as Integer)

            if _initalised then
                'perform checks here'
            end if

            _numberOne = value 
        End Set
    End Property

    Public Property NumberTwo() as Integer
        Get
            return _numberTwo
        End Get
        Set(value as IntegeR)
            if _initalised then
                'perform checks here'
            end if

            _numberTwo = value 
        End Set
    End Property

    Public Sub BeginInit Implements ISupportInitalise.BeginInit
        _initalised = false
    End Sub

    Public Sub EndInit Implements ISupportInitalise.EndInit
        _initalised = true

        'perform all checks here'
    End Sub

End Class

Таким образом, вся ваша проверка может быть отключена до тех пор, пока ваш объект не будет полностью инициализирован.

Другие советы

Вы можете проверить в своем переопределенном установщике Text , установлен ли он на controlName # , и, если это так, ничего не делать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top