Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以使用标记属性存储它的名称吗?_C#_Winforms_Validation_.net 4.0 - Fatal编程技术网

C# 我可以使用标记属性存储它的名称吗?

C# 我可以使用标记属性存储它的名称吗?,c#,winforms,validation,.net-4.0,C#,Winforms,Validation,.net 4.0,我使用下面的方法验证groupbox中textbox中的数据 因此,以改善用户反馈为例 消息文本请输入名字 其中First Name是textbox的标签,所以我使用textbox.Tag存储textbox的名称来实现它,因为textbox和它是label之间没有链接 我搜索并发现我可以使用Tag属性来存储任何东西,但我想确保按照我告诉过你的方法使用它 这有什么问题吗 public int ValidateData() { foreach (Control con

我使用下面的方法验证groupbox中textbox中的数据 因此,以改善用户反馈为例

消息文本请输入名字

其中First Name是textbox的标签,所以我使用textbox.Tag存储textbox的名称来实现它,因为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属性不会影响您的应用程序。您可以毫无问题地在其中存储任何您想要的信息。

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

但您是否注意到工具提示如何让您在设计时为控件设置工具提示

工具提示、ErrorProvider或HelpProvider是扩展程序提供程序组件的示例。它们在设计时向控件添加一些属性。您还可以通过实现为DisplayName创建这样的组件

范例

下面的代码向您展示了创建名为DisplayNameExtender的组件的容易程度。在窗体上删除此组件的实例时,将向控件的设计时添加一个新属性,您可以将该值设置为该属性 设计时:DiaplayNameExtender 1上的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;
    }
}

:获取或设置包含控件数据的对象。-我想说,这是合法的。@Fildor是的,我确实读过,但为了100%确定,感谢您分享您的经验。经验中只有一件事:您可能想在标记中实际存储一个具有属性名称的对象。您可以让它实现一些接口。如果您以后被要求在那里存储其他内容,您可以使用另一个界面合成该对象,而无需中断100行代码。给出的答案是有效的,但您是否注意到工具提示如何让您在设计时为控件设置工具提示?