Соедините ярлык с элементом управления, который он представляет - PullRequest
0 голосов
/ 30 марта 2011

Я размышлял над этой проблемой уже некоторое время. Есть ли аккуратный способ "связать" Label с элементом управления, который он функционально маркирует?

Например, у вас есть форма для создания нового профиля пользователя. Если пользователь не заполняет необходимое поле, Label этого TextBox, или NumericUpDown или что-то еще, становятся красными. Каким-то образом Label должен знать, к какому Control принадлежит, и наоборот.

Сейчас я делаю поиск правильной метки по ее свойству .Name, что совпадает (частично) со свойством .Name моего текстового поля. Этот уродливый метод выглядит примерно так (VB.NET):

Dim redLabel As Label

For Each txt As Control In Me.Controls
    If (TypeOf txt Is TextBox And txt.Text = "") Or _
       (TypeOf txt Is NumericUpDown And txt.Text = "0") Then

        'Change corresponding label color to red'
        redLabel = CType(Me.Controls.Find("Label" & _
                         txt.Name.Remove(0, "TextBox".Length), True)(0), Label)
        redLabel.ForeColor = Color.Red
        'Get name of the non-filled field'
        boxesNotFilled.Add(redLabel.Text)

    End If
Next

Я мог бы создать пользовательский элемент управления, который выполняет эту работу, но я бы не хотел, если бы мне это не понадобилось (классическая проблема изобретения колеса). Логически возникает вопрос: существует ли способ обеспечить такое взаимодействие между элементами управления без их поиска и использования ненадежного именования элементов управления в качестве соглашения, без написания пользовательских элементов управления?

Ура! =)

Ответы [ 2 ]

0 голосов
/ 30 марта 2011

Как насчет того, чтобы начать с RequiredFieldValidator ? Это даст вам свойство ControlToValidate во время выполнения.

0 голосов
/ 30 марта 2011

Я бы пошел с кастомом UserControl для чего-то подобного. Для написания простого UserControl требуется меньше времени, чем для отправки вопроса в StackOverflow. :)

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