2017-03-07 8 views
0

私はwinformのC#アプリケーションで作業しています。すべてのラベルのスタイルを定義します。

要素のスタイルがないことがわかりました(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; 
     } 
    } 
} 

それは動作しますが、それはデザイナーで正しく表示されませんが(私は私のデザインを見て、アプリケーションを実行する必要があります)。それはおそらく最も単純な方法ですか?

+1

デザイン時にすべてのラベルのスタイルを変更したいですか?実行時にあなたのアプローチに何が間違っていますか? Visual Studioの –

+0

、ウィンドウ 'myControl.cs [Design]'自分のスタイルが見えません。このスタイルは、アプリケーションを実行する場合にのみ適用されます。 –

+0

ベスト・アプローチは、カスタム・コントロールを作成することです。単にLabelから派生し、コンストラクタでプロパティを設定して、単純にそのラベルを代わりに使用します。 – Franck

答えて

1

私のコメントによると、最も簡単なのは、カスタムコントロールを作成し、それをあなたのウィンドウで使用することです。

ここに簡単です。単に単にウィンドウにドロップをドラッグして、それはだ、ラベルを上書きし、その後、一度コンパイルし、デザインビューに移動し、あなたのツールボックスを開き、「DesignLabel」を参照してくださいます

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))); 
     } 
    } 

をしたいコンストラクタでデフォルト値を設定しますそれ。クラスのデフォルトを変更すると、その場所全体が変更されます。

0

Form.cs [デザイン]で表示できるように、既にデザイン時にスタイルを変更する場合は、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ファイルを編集することは決して良い考えではありません。私は実行時の変更に固執します。あなたはそれのためにthis.Controlsをフィルタリングし、このようなコレクションをforeachのすべてLabel Sを変更する場合:

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 
}); 

結果は同じになります。

関連する問題