【问题标题】:How to override System.Windows.Forms label background color in C#?如何在 C# 中覆盖 System.Windows.Forms 标签背景颜色?
【发布时间】:2015-07-22 07:30:41
【问题描述】:

我正在尝试编写一个类来覆盖整个项目中的所有标签背景,而不更改它们在 Designer.cs 文件中的定义。 我的意思是我可以简单地将this.label1 = new System.Windows.Forms.Label(); 更改为this.label1 = new myLabel();,但我不想这样做。
这是我的 label.cs

    using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace T1
{

    class Label:System.Windows.Forms.Label
    {
        public override Color BackColor
        {
            get
            {
                return Color.DarkRed;
            }
            set
            {
                base.BackColor = value;
            }
        }

    }
}

我试图调用我的命名空间 System.Windows.Forms 以覆盖它当前的标签颜色属性,但到目前为止我无法到达任何地方。 任何帮助,将不胜感激。 万事如意。

【问题讨论】:

  • 覆盖标签可能是正确的方法,其次,您可以创建自己的自定义表单类来继承它执行单独的Initialize 步骤,但这也会产生开销
  • @Sayse mmmm,听起来是个不错的选择。您能否提供一个我可以学习的代码示例?非常感谢。
  • 首先 - 公开这个类并将名称更改为 MyLabel 或其他东西
  • @MajkeloDev 我把它公开了。但关键是,如果我将类名从 label 更改为其他名称,那么我将不得不将 this.label1 = new System.Windows.Forms.Label(); 更改为 this.label1 = new myLabel(); ,例如,这不是我想要实现的目标。
  • @Sam - 我添加了一个答案来演示表单方法,如果这没有任何用处,请告诉我,我将删除答案。

标签: c# oop overriding


【解决方案1】:

首先,让我首先说,我认为听起来你会更好地用你提到的覆盖标签替换引用(可能不是通过编辑designer.cs,而是通过替换控件)

但根据我的评论,您可以创建自己的表单来覆盖所有需要像这样调整其控件然后从该表单继承的表单

class MyMiddleFormClass : Form
{
     public MyMiddleFormClass()
     {
          this.OnLoad += OnLoadHandler;
     }

     private void OnLoadHandler(object o, EventArgs e)
     {
          foreach(var lbl in this.Controls.OfType<Label>())
              lbl.BackColor = Color.DarkRed;
     }
}

注意:我尚未测试此代码,如果您需要自己使用 OnLoad 事件,可能需要额外的工作。

同样,如果现在花时间重构控件而不是这样做,您会受益更多。

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多