将标签与其代表的控件连接

时间:2011-03-30 15:56:48

标签: .net winforms visual-studio user-interface

我一直在思考这个问题已有一段时间了。是否有一种整洁的方式将Label与一个以功能方式标记的控件“连接”起来?

例如,您有一个表单来创建新的用户个人资料。如果用户未填写必填字段,则LabelTextBoxNumericUpDown的{​​{1}}会变为红色。不知何故,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

我可以制作一个自定义控件来完成这项工作,但如果我不需要,我不想(重新发明轮子的经典问题)。逻辑上的问题是:有没有办法在控件之间提供这种交互而不搜索它们并使用 not-at-all-safe 控件命名作为约定,而不编写自定义控件?

干杯! =)

2 个答案:

答案 0 :(得分:0)

我会使用自定义UserControl来获取此类内容。编写简单的UserControl比向StackOverflow发布问题花费的时间更少。 :)

答案 1 :(得分:0)

RequiredFieldValidator开头怎么样?这将在运行时为您提供ControlToValidate属性。