Я размышлял над этой проблемой уже некоторое время. Есть ли аккуратный способ "связать" 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
Я мог бы создать пользовательский элемент управления, который выполняет эту работу, но я бы не хотел, если бы мне это не понадобилось (классическая проблема изобретения колеса). Логически возникает вопрос: существует ли способ обеспечить такое взаимодействие между элементами управления без их поиска и использования ненадежного именования элементов управления в качестве соглашения, без написания пользовательских элементов управления?
Ура! =)