2012-01-12 8 views
1

コントロールのテンプレートを作成し、特定のコントロールのみに適用する方法があるのだろうかと思います。以下の関数は、コントロール(GridViewとListbox)の事前定義された設定を行い、それをメインフォームにあるコントロールに適用します。問題は次のとおりです。フォームのコントロールにテンプレートを適用する方法は?

  1. 他の形式のコントロールでは機能しません。
  2. 適用するコントロールを指定することはできません。

私は良い方法があると確信していますが、私のグーグルは私のプログラミングスキルより悪いと思います。

public void SettingControls() 
    { 
     List<Control> lstControls = GetAllControls(this.Controls); 

     //DataGridView 
     DataGridViewCellStyle style; 
     style = new DataGridViewCellStyle(); 
     style.Alignment = System.Windows.Forms.DataGridViewContentAlignment.BottomCenter; 
     style.BackColor = System.Drawing.Color.GhostWhite; 
     style.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
     style.ForeColor = System.Drawing.Color.Black; 
     style.SelectionBackColor = System.Drawing.SystemColors.Highlight; 
     style.SelectionForeColor = System.Drawing.Color.Navy; 
     style.WrapMode = System.Windows.Forms.DataGridViewTriState.True; 

     DataGridViewAdvancedBorderStyle borderStyle; 
     borderStyle = new DataGridViewAdvancedBorderStyle(); 
     borderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.OutsetDouble; 

     foreach (Control control in lstControls) 
     { 
      //DataGridView 
      if (control is DataGridView) 
      { 
       DataGridView dgv = ((DataGridView)control); 
       dgv.Dock = DockStyle.Fill; 
       dgv.AutoGenerateColumns = true; 
       dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;      
       dgv.Dock = DockStyle.Fill; 
       dgv.DefaultCellStyle.BackColor = Color.Bisque; 
       dgv.BorderStyle = BorderStyle.FixedSingle; 
       dgv.BackgroundColor = Color.GhostWhite; 

       dgv.DefaultCellStyle = style; 
      }     

      //ListBox 
      if (control is ListBox) 
      { 
       ListBox lb = ((ListBox)control); 
       lb.MeasureItem += new MeasureItemEventHandler(lb_MeasureItem); 
       lb.DrawItem += new DrawItemEventHandler(lb_DrawItem); 
      } 
     } 
    } 

答えて

0

最も簡単な方法は、あなたの他のフォームから継承する基本フォームを作成し、上記の例のために、Form_Loadイベントに呼ばれている標準的な方法として、メソッドを追加することです。例えば

public class FormBase : Form 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     SettingControls(); 
    } 

    // Declare as virtual to allow inheritors to override 
    public virtual void SettingControls() 
    { 
     // Code here 
    } 
} 
+0

どうでしょうWinFormsのアプリで、この作品? –

+0

@ M.Babcock:私がsaveを押すとすぐにwinformsであることに気付きました。私はwinformsに対する正しい応答を示す答えを修正しました。 –

+0

私は決して継承が便利になるとは思わなかった。ありがとうございました。 –

0

使用拡張メソッド。プロジェクト内の静的クラスを作成し、拡張メソッドを追加します。

public static class Extensions 
{ 
    public static void SettingControls(this Form form) 
    { 
     List<Control> lstControls = GetAllControls(form.Controls); 
     ... 
    } 
} 

今、あなたのいずれかでそれを呼び出すことができます。

this.SettingControls(); // If code is in a Form. 

myForm.SettingControls(); // If myForm is a Form. 
+0

ありがとうございます。たくさん助けてくれました。 –