我可以使用 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 ToolTip
、ErrorProvider
或 HelpProvider
是扩展提供程序组件的示例。他们在设计时向控件添加一些属性。您还可以通过实现 IExtenderProvider
为 DisplayName
创建这样的组件。
例子
以下代码向您展示了如何轻松创建名为 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;
}
}
我正在使用以下方法在 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 ToolTip
、ErrorProvider
或 HelpProvider
是扩展提供程序组件的示例。他们在设计时向控件添加一些属性。您还可以通过实现 IExtenderProvider
为 DisplayName
创建这样的组件。
例子
以下代码向您展示了如何轻松创建名为 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;
}
}