【问题标题】:Can I use Tag property to store it is name?我可以使用 Tag 属性来存储它的名称吗?
【发布时间】:2018-09-11 12:54:48
【问题描述】:

我正在使用下面的方法来验证 textbox 中的数据 groupbox 例如,为了改善用户反馈

消息文本Please enter 名字

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

我搜索并发现我可以使用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;
    }

谢谢

【问题讨论】:

  • Docu: “获取或设置包含控件数据的对象。” - 合法,我会说。
  • @Fildor 是的,我确实读过它,但只是为了 100% 确定感谢您分享您的经验
  • 经验不足的只有一件事:您可能希望在标签中实际存储具有“名称”属性的对象。你可以让它实现一些接口。如果您以后被要求在其中额外存储其他内容,您可以使用另一个接口组合该对象,而不会破坏 100 行代码。
  • 给出的答案是有效的,但是您是否注意到ToolTip 是如何让您在设计时为您的控件设置ToolTip 的?

标签: c# winforms validation .net-4.0


【解决方案1】:

正如您所读到的,您可以在 Control.Tag 属性中存储派生自对象的任何类型(即一切),因此存储标签的名称就可以了。

【讨论】:

    【解决方案2】:

    Tag 属性的使用不会影响您的应用程序。您可以毫无问题地存储任何您想要的东西。

    【讨论】:

      【解决方案3】:

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

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

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

      示例

      以下代码向您展示了创建一个名为DisplayNameExtender 的组件是多么容易。当您将该组件的实例拖放到窗体上时,将在控件的设计时添加一个新属性,您可以将值设置为该属性 在设计时:在 diaplayNameExtender1 上显示名称

      然后在运行时,无论何时你想为一个控件获取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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-11-24
        • 1970-01-01
        • 2014-08-17
        • 1970-01-01
        • 2012-10-19
        • 2019-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多