Настраиваемые элементы управления графическим интерфейсом в отдельном проекте - PullRequest
0 голосов
/ 22 марта 2012

Winclient использует элементы управления GUI (BaseForm, BaseTextBox, BaseComboBox) из отдельного проекта GUI, который также используется в других проектах

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

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

Какой наилучший подход?Я подумал, что, может быть, мне удастся внедрить какой-то «CustomColorProvider» в элементы управления и переписать проект GUI, чтобы получить фокусный цвет из «StandardColorProvider».Но я не совсем понимаю, как эти элементы управления должны вводить свой «CustomColorProvider».(Я не очень разбираюсь в DI). Элементы управления добавляются через конструктор, а создание элементов управления выполняется автоматически сгенерированным кодом «частичный класс конструктора»

.winclient, который наследует от проекта GUI, а затем переопределяет методы, в которых установлен focuscolor?

У меня есть доступ и я могу изменять как winclient, так и проект GUI.

Ответы [ 2 ]

1 голос
/ 22 марта 2012

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

EDIT:

Объявить интерфейс IControlExtender

public interface IControlExtender
{
    Color BackColor { get; }
    Color HighlightColor { get; }
}

Создать реализацию по умолчанию

class DefaultExtender : IControlExtender
{
    public Color BackColor
    {
        get { return Color.Yellow; }
    }

    public Color HighlightColor
    {
        get { return Color.Red; }
    }
}

Добавить свойство в элемент управления GUI

IControlExtender _extender = new DefaultExtender();
public IControlExtender Extender
{
    get { return _extender; }
    set
    {
        if ((value != null) && (value != _extender))
        {
            _extender = value;
            RefreshControl();
        }
    }
}

void RefreshControl()
{
    this.BackColor = Extender.BackColor;
}

Создание любых новых реализаций, таких как

class CustomExtender:IControlExtender
{
    public Color BackColor
    {
        get { return Color.Green; }
    }

    public Color HighlightColor
    {
        get { return Color.Pink; }
    }
}

И переопределите настройки по умолчанию, как вам нужно

public Form1()
{
    InitializeComponent();
    control1.Extender = new CustomExtender();
}
0 голосов
/ 22 марта 2012

Я полагаю, что ваши элементы управления GUI добавляют обработчик для событий OnEnter и OnLeave, я попытаюсь расширить этот метод, добавив новый метод, принимающий другой параметр, ваш желаемый цвет.Затем сохраните этот цвет глобально и используйте его в методе OnEnter.

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