2013-04-14 21 views
0

除了創建自定義按鈕,自定義文本框和一個自定義標籤等,然後利用整個應用程序的所有形式的控制,然後更改默認的顏色,並根據需要這些控件的字體,有在包含多種表單的現有應用程序上實現這種類似css的功能的簡單方法?順便說一下,我知道我可以通過編程方式打開每個* .Designer.cs文件,然後搜索/替換「System.Windows.Forms。[Control]」的實例與「My.Namespace.My [Control ]「,但我不確定在代碼設置控件的字體和顏色以及類似屬性的情況下,這將如何工作。那麼它是否會確保自定義控件覆蓋所有相關的getter方法?在應用程序中更改多種表單樣式的最簡單方法是什麼?

+0

無需購買第三方庫,沒有一個簡單的方法來「皮膚」的app.AFAIK。看看DevExpress的產品。發現這個免費的[被遺棄的(但不知道是什麼樣子的使用):http://sourceforge.net/projects/guiss/ –

+0

如果你用WPF工作,你可以與款式工夫,然後每個窗體上應用,但關於winforms,我不知道。 – trajce

+0

我認爲telerik還提供了一些自定義表單。 – trajce

回答

2

Windows窗體不提供任何形式剝皮。

一個簡單的解決辦法可能是寫某種擴展方法對Form類:

public static void ApplySkin(this Form form, Skin skin) 
{ 
    foreach (Control ctrl in form.Controls) 
    { 
     if (ctrl is TextBox) 
     { 
      TextBox textBox = (TextBox)ctrl; 
      textBox.BackColor = skin.BackColor; 
      textBox.ForeColor = skin.ForeColor; 
      textBox.Font = skin.Font; 
      ... 
     } 
     else if (ctrl is ComboBox) 
     { 
      ComboBox comboBox = (ComboBox)ctrl; 
      comboBox.BackColor = skin.BackColor; 
      comboBox.ForeColor = skin.ForeColor; 
      comboBox.Font = skin.Font; 
      ... 
     } 
     else if (ctrl is ...) 
    } 
} 
0

關於Designer.cs文件 - 你應該避免不惜一切改變他們的代碼。他們被設計師使用,並由於某種原因而分離。

如果你想改變的東西,形式CTOR,調用的InitializeComponent(),只需調用自己的函數,你會喜歡的任何更改後(改變屬性值,如顏色,代表等)

如果你想幾種形式,以具有相同的風格(或功能),只是把這個方法在不同的類,並有所有的形式發送自己作爲參數,使用同樣的方法。

現在ofcourse方法不會知道哪些控制在形成這樣你就可以使用Controls.Find(表格的方法之一)來通過名稱定位控制。只要確保表單中的控件使用相同的約定正確命名(例如,所有列表框將命名爲listBoxX,其中X是數字...)。

相關問題