我可以使用Tag属性存储名称吗?

时间:2018-09-11 12:54:49

标签: c# winforms validation .net-4.0

我正在使用以下方法来验证textboxgroupbox中的数据 因此,例如为了改善用户反馈

消息文本Please enter 名字

其中名字是文本框的标签,所以我使用Textbox.Tag存储textbox的名称来实现它,因为{{1 }}是Textbox

我搜索并发现可以使用Label属性存储任何内容,但是我想确保我告诉过您的信息是使用

这有什么问题吗?

Tag

谢谢

3 个答案:

答案 0 :(得分:4)

如您所读,您可以在Control.Tag属性中存储从对象(即所有对象)派生的任何类型,因此可以存储标签的名称。

答案 1 :(得分:3)

使用Tag属性不会影响您的应用程序。您可以毫无问题地将任何内容存储在其中。

答案 2 :(得分:2)

正如在其他答案中已经提到的那样,可以使用Tag属性存储有关控件的任何种类的附加信息,包括显示名称。

但是您是否曾经注意到ToolTip如何让您在设计时为控件设置ToolTip

ToolTipErrorProviderHelpProvider是扩展程序提供程序组件的示例。他们在设计时向控件添加了一些属性。您也可以通过实现IExtenderProviderDisplayName创建这样的组件。

示例

以下代码向您展示了如何轻松创建名为DisplayNameExtender的组件。当您将此组件的实例放在窗体上时,新的属性将添加到控件的设计时,您可以将值设置为该属性  在设计时:diaplayNameExtender1上的 DisplayName

然后在运行时,只要要为控件获取DisplayName的值,就可以通过这种方式找到它:

var displayName = displayNameExtender1.GetDisplayName(control);

以下是DisplayNameExtender组件的代码:

using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
[ProvideProperty("DisplayName", typeof(Control))]
public class DisplayNameExtender : Component, IExtenderProvider
{
    private Hashtable displayNameValues = new Hashtable();
    public bool CanExtend(object extendee)
    {
        return (extendee is Control && !(extendee is Form));
    }
    public string GetDisplayName(Control control)
    {
        if (displayNameValues.ContainsKey(control))
            return (string)displayNameValues[control];
        return null;
    }
    public void SetDisplayName(Control control, string value)
    {
        if (string.IsNullOrEmpty(value))
            displayNameValues.Remove(control);
        else
            displayNameValues[control] = value;
    }
}