Как я могу легко сохранить согласованные настройки пользовательского интерфейса в приложении C # Winform? - PullRequest
4 голосов
/ 14 марта 2010

У меня много разных UserControls, и я хотел бы поддерживать согласованные настройки пользовательского интерфейса (в основном, цвета и шрифты). Моя первая попытка была такой:

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

вызывается в каждом элементе управления следующим образом:

settings.SetupUserControl(ref this);

Поскольку this только для чтения, его нельзя передать аргументом ref, поэтому это не работает. Какие есть другие варианты для поддержания согласованного интерфейса без изменения свойств каждого элемента вручную?

Ответы [ 4 ]

5 голосов
/ 14 марта 2010

Наследование! Если у вас есть форма или элемент управления, которые будут постоянно использовать одни и те же стили, и вы хотите установить их в качестве своей базы, просто создайте свои собственные пользовательские элементы управления, которые наследуются от формы / элемента управления. По умолчанию все ваши формы будут наследоваться от «Form». Вместо того, чтобы наследовать от формы по умолчанию, создайте новый пользовательский элемент управления, который наследуется от формы, и затем используйте его в качестве базового класса.

CustomForm : Form // Your custom form.

Form1 : CustomForm // Inherit from it.

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

Всякий раз, когда вы хотите внести изменения в ваши базовые стили или любые настройки, просто измените настройки пользовательских элементов управления - ваши новые формы / элементы управления будут автоматически обновляться!

3 голосов
/ 14 марта 2010

Сделайте то же самое. Не проходите мимо. UserControl уже является ссылочным объектом, поэтому нет необходимости передавать его в ваш метод с помощью ключевого слова ref.

Вы также можете рассмотреть рекурсивный метод, который найдет все пользовательские элементы управления в форме и передаст его в ваш метод.

1 голос
/ 14 марта 2010

Два ответа:

  1. Вам не нужно ref, элементы управления являются объектами ссылочных типов. Просто брось.
  2. Создайте базовый UserControl и извлеките ваши элементы управления из этой базы. Вы все еще можете это сделать, просто отредактировав определения классов элементов управления. Для новых элементов управления вы можете следовать за мастером.

Совет: настройте стиль в baseControl. Затем убедитесь, что производные элементы управления не переопределяют, лучший способ сделать это - сканировать файлы * .Designer.cs и удалить все параметры, которые, как вам известно, должны исходить из базы.

1 голос
/ 14 марта 2010

Как насчет базового класса, который предоставляет такие настройки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...