2013-04-14 2 views
0

Помимо создания пользовательской кнопки и пользовательского текстового поля, а также пользовательского ярлыка и т. Д., А затем используя эти элементы управления во всех формах приложения, а затем, при необходимости, изменяя цвета и шрифты по умолчанию этих элементов управления простой способ реализовать такой вид CSS-функции в существующем приложении, который содержит несколько форм?Какой самый простой способ изменить стиль нескольких форм в приложении?

Кстати, я знаю, что я мог бы просто программно открыть каждый файл * .Designer.cs, а затем искать/заменять экземпляры «System.Windows.Forms. [Control]» на «My.Namespace.My [Control ] ", но я не уверен, как это будет работать в случаях, когда код устанавливает шрифты и цвета элементов управления и аналогичные свойства. Стало бы, нужно только убедиться, что пользовательские элементы управления перекрывают все соответствующие методы получения?

+0

Без покупки 3-й библиотеки партии, не существует простой способ «кожи» app.AFAIK. Взгляните на предложение DevExpress. Нашел этот бесплатный [заброшенный] (но не знаю, как его использовать): http://sourceforge.net/projects/guiss/ –

+0

, если вы работаете с WPF, вы можете работать со стилями, а затем применять к каждой форме , но об winforms, я не знаю. – trajce

+0

Я думаю, что telerik также предлагает некоторые пользовательские формы. – trajce

ответ

2

Windows Forms не предоставляет никаких скинов.

простой обходной путь может быть, чтобы написать какой-то метод расширения на 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(), просто вызовите свою собственную функцию с любыми изменениями, которые вы хотели бы (изменение значений атрибутов, такие как цвет, делегаты и т.д. ...)

Если вы хотите, чтобы несколько форм имели один и тот же стиль (или функциональность), просто поместите этот метод в другой класс и все формы используют один и тот же метод, отправив себя в качестве параметров.

Теперь, когда метод не будет знать, какие элементы управления находятся на каких формах, вы можете использовать Controls.Find (один из методов Form) для определения элементов управления по имени. Просто убедитесь, что элементы управления в вашей форме правильно названы с использованием тех же конвенций (например, все окна списка будут иметь имя listBoxX, где X - номер ...).