我可以使用 Tag 属性 来存储它的名字吗?

Can I use Tag property to store it is name?

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

消息正文Please enter名字

其中 First Name 是文本框的标签,所以我使用 Textbox.Tag 来存储 textbox 的名称来实现它,因为没有 link 在 Textbox 之间是 Label

我搜索并发现我可以使用 Tag 属性 来存储任何东西,但我想确保在我告诉你

之前使用它

有什么问题吗?

    public int ValidateData()
    {
        foreach (Control cont in GB_PatientInfo.Controls)
        {
            if (cont is TextBox)
            {
                if (string.IsNullOrWhiteSpace(cont.Text.Trim()))
                {
                    MessageBox.Show("enter data " + cont.Tag, "Message", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RtlReading);
                    cont.BackColor = Color.Red;
                    cont.Focus();
                    return -1;
                }
            }
        }
        return 1;
    }

谢谢

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

标签属性的使用不会影响您的申请。您可以毫无问题地在其中存储任何内容。

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

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

A 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;
    }
}