Как мне реализовать цветовой код всего приложения в приложении WinForm? - PullRequest
5 голосов
/ 01 октября 2009

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

Я получил статический класс где-то, похожий на этот:

 public static class MyColors
    {
        public static Color DarkGreen = Color.FromArgb(0, 70, 62);
        ...
        public static Color Orange = Color.FromArgb(239, 132, 16);

    }

Я могу использовать эти цвета в своем коде довольно легко, но это невозможно сделать из конструктора, который вызывает эту ошибку:

MyColors.DarkGreen не является действительным значение для Int32.

(я пытался сохранить представление этих цветов в Int32, но это не удалось с той же ошибкой)

Решение, которое я использую сейчас, заключается в использовании цветового кода rgb в конструкторе, значений класса MyColors в моем коде, и я делаю изменения, используя замену всех функциональных возможностей Visual Studio. Это не очень хорошее решение, но мне пока не удалось найти лучшую идею.

Есть идеи?


Примечание: я знаю о этом вопросе , который немного отличается от моего, так как я не смотрю на изменение "KnownColors".

Ответы [ 5 ]

2 голосов
/ 01 октября 2009

Я не думаю, что это возможно, потому что вам нужно изменить поведение самого окна свойств. Ввод «255, 128, 64» работает, потому что окно «Свойства» содержит код, который пытается преобразовать любой тип, введенный в системный цвет, в именованный «веб» или в цвет, заданный RGB, и отображает «бла-бла-бла» недопустимое значение для Int32. " сообщение для любого текста, который он не может преобразовать таким образом (например, «MyColors.DarkGreen»).

2 голосов
/ 01 октября 2009

Чтобы получить дизайнерскую поддержку для ваших дополнительных определений цветов, вам, вероятно, нужно создать свои собственные редакторы, которые расширяют или заменяют редактор Color. После того, как вы определили их, вам нужно будет сообщить дизайнеру, какие свойства должны использовать ваш редактор, применив атрибут Editor к затронутым свойствам.

Вы также можете достичь некоторого успеха, сделав что-то похожее с TypeConverter и TypeConverterAttribute.

1 голос
/ 12 ноября 2010

Если вы пытаетесь использовать тематический подход, то есть ярлыки с фиксированными свойствами backcolor и forecolor создают компонент и изменяют его код, как показано ниже:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace YourNameSpace
{
    public partial class NameOfStaticColoredLabel : Label
    {
        public NameOfStaticColoredLabel()
        {
            InitializeComponent();
        }

        public NameOfStaticColoredLabel(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }

        public override Color ForeColor
        {
            get
            {
                return Color.Black;
            }
            set
            {
                base.ForeColor = Color.Black;
            }
        }

        public override Color BackColor
        {
            get
            {
                return Color.Aquamarine;
            }
            set
            {
                base.BackColor = Color.Aquamarine;
            }
        }
    }
}

Как видите, все, что вам нужно сделать, это переопределить связанные свойства элемента управления меткой. Затем вы перетаскиваете эти ярлыки в ваши анкеты. Когда вам нужно изменить их цвет, просто сделайте это в вышеприведенном классе и перестройте приложение. Этот подход создаст статическую цветную метку, и вы не сможете изменить ее цвет по сравнению с дизайнером или кодом.

1 голос
/ 01 октября 2009

Лучше всего не пытаться что-либо делать в конструкторе. Просто оставьте все ваши формы с цветами по умолчанию во время разработки.

Я принимал участие в проектах, у которых была схема, подобная вашей, и возникали всевозможные проблемы. Кнопка была установлена ​​на значение RGB в конструкторе; Еще одна кнопка в той же форме получила свой цвет в коде (из статического класса), и два цвета немного отличались. Со временем эти проблемы начнут появляться.

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

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

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

Например:

 public static class MyColors
    {
        public static Color DarkGreen = Color.FromArgb(0, 70, 62);
        ...
        public static Color Orange = Color.FromArgb(239, 132, 16);

        public static Color ButtonBackColor = DarkGreen;
    }

Таким образом, если вы хотите изменить все свои кнопки с DarkGreen на Orange, это будет всего одна строка.

0 голосов
/ 02 октября 2009

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

public static Color DarkGreen = Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(70)))), ((int)(((byte)(62)))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...