2012-01-12 43 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

相关问题