C # Приложение широкого управления цветом - PullRequest
2 голосов
/ 30 апреля 2009

я собираюсь написать большое приложение на C #. Дело в том, что цвета элементов управления должны настраиваться пользователем приложения. Было бы очень хорошо, если бы было какое-либо решение переопределить (только для контекста этого приложения) System.Drawing.SystemColors, чтобы мне не приходилось устанавливать значение каждого отдельного элемента управления вручную. Кто-нибудь знает решение моей проблемы, которое так просто? Спасибо

Ответы [ 6 ]

1 голос
/ 30 апреля 2009

Я думаю, что ваш лучший подход - наследовать каждый элемент управления и устанавливать его свойства отображения по умолчанию. Это даст вам библиотеку стандартных элементов управления WinForms, которые вы можете легко настроить и использовать повторно. Больше информации здесь (в VB я не могу найти примеры в C #).

1 голос
/ 30 апреля 2009

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

0 голосов
/ 30 апреля 2009

Потратьте $ 1000 и получите копию DevExpress. Мы пишем большие приложения, используя их фреймворк, и возможность создания скинов великолепна.

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

0 голосов
/ 30 апреля 2009

Я написал код ниже, чтобы сделать что-то вроде этого. Я не особенно доволен этим, так как он нуждается в специальной обработке для любых элементов управления, которые являются необычными, но он сделал свою работу. Я держу экземпляр Painter и вызываю Apply каждый раз, когда создаю форму, передавая форму в качестве аргумента. Он проходит через все дочерние элементы управления, изменяя их внешний вид

public class Painter
{
    Color foreColor;
    Color backColor;
    Color altBackColor;
    Color buttonColor;
    Font font;

    public Painter(Color foreColor, Color backColor, Color altBackColor, Color buttonColor, Font font)
    {
        this.foreColor=foreColor;
        this.backColor=backColor;
        this.altBackColor=altBackColor;
        this.buttonColor=buttonColor;
        this.font=font;
    }    

    public void Apply(Control c)
    {
        if(c==null)
            return;

        c.ForeColor = foreColor;

        c.BackColor = (c is Button ) ? buttonColor
                                     : backColor;

        if (c is DataGridView)
        {
            var dgv = (DataGridView) c;
            dgv.BackgroundColor = BackColor;
            dgv.AlternatingRowsDefaultCellStyle.BackColor = altBackColor;
            dgv.ColumnHeadersDefaultCellStyle.BackColor = buttonColor;
        }

        c.Font = font;

        foreach(Control child in c.Controls)
            Apply(child);
    }
}
0 голосов
/ 30 апреля 2009

К сожалению, невозможно изменить цветовую схему Windows только для вашего приложения.

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

0 голосов
/ 30 апреля 2009

Вам не нужно переопределять системные значения по умолчанию, но вы можете определить свои собственные цвета.

Color NastyColour = Color.FromArgb(1, 2, 3);

1 = красный 2 = Зеленый 3 = синий

...