2010-03-14 33 views
4

我有很多不同的UserControls,並希望保持一致的UI設置(主要是顏色和字體)。我的第一次嘗試是這樣的:如何在C#Winform應用程序中輕鬆保持一致的UI設置?

public class UISettings 
{ 
//... 
    public void SetupUserControl(ref UserControl ctrl) 
    { 
     ctrl.BackColor = this.BackColor; 
    } 
} 

在這樣的每一個控制被稱爲:

settings.SetupUserControl(ref this); 

由於this是隻讀的,它不能被ref參數傳遞所以這是行不通的。什麼是其他選項可以保持一致的UI,而無需手動更改每個項目的屬性?

回答

3

做同樣的事情。不要通過參考。 UserControl已經是一個引用對象,所以不需要使用ref關鍵字將它傳遞給你的方法。

您可能還想考慮一種遞歸方法,它將查找窗體上的所有UserControl並將其傳遞到您的方法中。

+0

我做了遞歸方法,它的工作原理非常完美,謝謝。 – Lukas

5

繼承!如果你有一個不斷使用相同樣式的表單或控件,並且想要將它設置爲基礎,那麼只需創建自己的用戶控件即可從表單/控件繼承。默認情況下,所有表單都將從「表單」繼承。而不是從默認窗體繼承,創建一個從Form繼承的新用戶控件,然後將其作爲基類。

CustomForm : Form // Your custom form. 

Form1 : CustomForm // Inherit from it. 

...與組件相同的作品。如果你想要一個按鈕在板子上具有相同的樣式,創建一個用戶控件並讓它從按鈕控件繼承 - 然後使用自定義控件。

無論何時您想對基本樣式或任何設置進行更改,只需更改自定義控件設置 - 新窗體/控件將自動更新!

+1

我曾經這樣做過,這是一個好主意(+1),但最近我覺得它不夠好。這個問題是它缺乏內置的運行時主題/皮膚支持。內置支持僅在設計時進行。你當然可以將它建立到你的繼承控件上,但這是額外的工作。如果你將不得不編寫額外的代碼來支持主題(如果你有足夠的具體風格來證明繼承是正確的,那麼你可能應該),那麼你可以編寫代碼來處理任何庫存控制。 –

+0

那麼,使用正確的工具來完成正確的工作。沒有一個解決方案是全球性:) –

1

兩個答案:

  1. 你不需要ref,控件對象是引用類型。只要放下它。
  2. 創建一個Base UserControl並派生你的控件形式的基地。你仍然可以這樣做,只需編輯控件的類定義即可。對於新控件,您可以按照嚮導。

提示:在baseControl中設置樣式。然後確保派生控件不會覆蓋,最好的方法是掃描* .Designer.cs文件並刪除您知道應該來自基礎的所有設置。

相關問題