定义所有标签的样式

时间:2017-03-07 17:03:55

标签: c# winforms

我在winform的c#应用程序中工作。

我看到没有Style for element(与WPF不同)。但有没有办法简单地将所有标签设置为特定的设计?

其实我这样做:

public partial class myControl : UserControl
{
    private Color LabelColor = Color.Indigo;
    private Color LabelFont = new System.Drawing.Font("Arial",
        18F,
        System.Drawing.FontStyle.Regular,
        System.Drawing.GraphicsUnit.Point,
        ((byte)(0)));

    public myControl()
    {
        InitializeComponent();

        //Set design
        designLabels();
    }

    private void designLabels()
    {
        List<Label> labelsToStyle = new List<Label>();
        labelsToStyle.Add(labelName);
        labelsToStyle.Add(labelAge);
        labelsToStyle.Add(labelSize);

        foreach (Label l in labelsToStyle)
        {
            l.ForeColor = LabelColor;
            l.Font = LabelFont;
            l.Dock = DockStyle.Fill;
        }
    }
}

它可以工作,但它没有在设计器中正确显示(我必须运行应用程序才能看到我的设计)。也许它存在一种最简单的方式?

2 个答案:

答案 0 :(得分:1)

根据我的评论,最简单的方法是创建一个自定义控件并在窗口中使用该控件。

这里有多简单。只需覆盖标签并在构造函数中设置您想要的默认值

public class DesignLabel : Label
    {
        public DesignLabel()
        {
            ForeColor = Color.Indigo;
            Font = new System.Drawing.Font("Arial", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
        }
    }

然后编译一次然后转到你的设计视图,打开你的工具箱,你会看到“DesignLabel”,只需拖放窗口就可以了。如果您在课程中更改默认值,它将在整个地方进行更改。

答案 1 :(得分:0)

如果您想在设计时更改样式,以便可以在Form.cs [design]中看到,则需要编辑Form.Designer.cs文件!但是你必须手工为标签做标签。我在此示例中保存了项目属性中的FontColor(对不起德语版本):

enter image description here

在我的例子中,我有3 Label个。在Form.Designer.cs文件中,您可以添加属性:

// label1
// 
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(12, 9);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(41, 15);
this.label1.TabIndex = 0;
this.label1.Text = "label1";
this.label1.Font = Properties.Settings.Default.LabelFont;
this.label1.ForeColor = Properties.Settings.Default.LabelColor;

// 
// label2
// 
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 68);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(41, 15);
this.label2.TabIndex = 1;
this.label2.Text = "label2";

this.label2.Font = Properties.Settings.Default.LabelFont;
this.label2.ForeColor = Properties.Settings.Default.LabelColor;
// 
// label3
// 
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(12, 122);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(41, 15);
this.label3.TabIndex = 2;
this.label3.Text = "label3";

this.label3.Font = Properties.Settings.Default.LabelFont;
this.label3.ForeColor = Properties.Settings.Default.LabelColor;

结果如下:

enter image description here

<强>声明

我不推荐这种方法!编辑Form.Desginer.cs文件永远不是一个好主意!我会坚持运行时间的变化。如果您想要更改所有Label,只需为其this.Controls过滤,并按照以下方式预先收集:

this.Controls.OfType<Label>().ToList().ForEach(lbl =>
{
    lbl.Font = LabelFont;
    lbl.ForeColor = LabelColor;
    //lbl.Dock = DockStyle.Fill; // uncommented, because I could see only 1 Label
});

结果将是相同的。