【问题标题】:A mandatory label user control in C#C# 中的强制标签用户控件
【发布时间】:2013-08-27 13:05:42
【问题描述】:

好的 - 我只是需要一些想法。场景是 - 我的 windows 表单中有很多字段必须由用户输入。其中之一可能是“名称”。因此,为此,我有一个标签lblName 与文本Name,另一个标签lblMandatory 与文本* 以红色表示它是强制性的。这意味着我有一个字段Name 的两个标签,同样我的表单中有20 多个字段。我只是想创建一个自定义标签 - 一个名为 MandatoryLabelControl 的东西,默认情况下它的文本后面会有一个 *。这将帮助我减少表单中的标签数量。自定义标签实际上是两件事的组合 - 首先是标签的文本,其次是红色的 *。我搜索了很多,但找不到任何开始。请帮忙提出一些建议。

【问题讨论】:

  • 你可以使用 CSS 解决这个问题。为强制性标签应用一些特定的类,然后使用 CSS 类显示 *。
  • 显然没有人知道你在问一个winforms问题。您可以使用 [winforms] 标签来解决这个问题。不,用一个用户控件替换一个标签不会让你领先。

标签: c# .net winforms user-controls label


【解决方案1】:

您有两个选择 - 自定义标签控件或包含标签和 * 基于 Mandatory 属性的用户控件。如果您明确需要将“*”设为红色(根据您的 q 似乎是这种情况),您将需要使用用户控件。这稍微重一些,所以我建议重新考虑这个要求。以下是自定义标签控件的外观:

public class CustomLabel : Label
{
    public CustomLabel()
    {

    }

    public bool Mandatory { get; set; }

    public override String Text
    {
        get
        {
            return base.Text + " *";
        }
    }    
}

您现在将使用 CustomLabel 而不是 Label。

【讨论】:

  • 好的。红色 * 的方法是什么?
  • @Sandeep 我不会更改Text 属性,而是覆盖OnPaint 事件以在绘制基础测试后添加红色*。
  • @Sandeep,您可以使用由两个标签组成的用户控件。当 Mandatory 设置为 False 时隐藏带有“*”的标签。这里唯一的问题是您需要公开 Text 属性等,以便其他人使用它,就好像它是一个标签一样。
  • @Rotem 的方法也可以。它可能也会更有效率。如果您的代码由于某种原因依赖于标签的 Text 属性,则覆盖 Text 属性的 getter 有一个缺点。虽然不是通常的用法。否则,使用起来相当安全。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
相关资源
最近更新 更多