2012-01-12 27 views
1

我想知道是否有一種方法來創建控件的模板並將它們應用於特定的控件。下面的函數對控件(GridView和Listbox)進行預定義設置,並將其應用於主窗體中的控件。問題是:如何將模板應用於Forms中的控件?

  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應用程序? – 2012-01-12 01:46:28

+0

@ M.Babcock:我意識到這是winforms,只要我保存。我已經修復了答案,以顯示winforms的正確響應。 – 2012-01-12 01:52:14

+0

我從來沒有想過繼承會派上用場。謝謝。 – 2012-01-12 01:55:23

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

謝謝。幫了很多。 – 2012-01-12 14:25:02

相關問題