Помечать передний цвет (rgb) словарем (строка, int []) - PullRequest
0 голосов
/ 04 апреля 2020

Я ищу помощи, и, возможно, решение довольно простое, но я не могу понять. В последнее время я изучал и тестировал C#, и теперь моя проблема - простая ошибка, которую я прочитал, когда попробовал что-то, что я также нашел в Интернете.

Моя цель проста: на моей winform есть 2 метки, которые должны изменить их цвет переднего плана в зависимости от их текста. Текст может быть одним из 18 возможных вариантов (отдельные слова; это не так, но я установил ровно 18 различных слов, которые можно было бы написать на этикетках). Итак, я также поискал в Интернете и нашел что-то вроде создания словаря. Я сделал что-то вроде

Dictionary<string, int[]> word = new Dictionary<string, int[]>()
{
    {"Hello", new int[] {144, 144, 153} },
    {"Bye", new int[] {25, 127, 229} }
};

, затем в указанном c экземпляре / событии я написал

label1.ForeColor = Color.FromArgb(word[label1.Text[0]], word[label1.Text[1]], word[label1.Text[2]]);

, так что если (например) слово в Label1 будет "Hello" ", его передний цвет должен быть RGB со значениями сверху, что означает 3 значения int в ключе" Hello ".

Я использую Visual Studio 2019 (если я должен знать). Сообщение об ошибке гласит, что label1.text[0] (это должен быть строковый ключ, чтобы получить значение типа int) является значением char и не может быть преобразовано в строку. Есть что-то очевидное или основополагающее в winform или метках, которые мешают этому коду работать должным образом? Я делаю что-то неправильно? (конечно да). Что мне не хватает? Я пытался изменить строку в объекте в объявлении словаря, но это не сработало, я пытался также использовать label1.text.ToString()[0], но все равно не сработает.

Благодарю вас за ответы!

1 Ответ

1 голос
/ 05 апреля 2020

Из словаря ниже у вас есть ключи Hello, Bye, и с помощью этих ключей вы можете получить массив с rgb;

Вы должны сделать это следующим образом.

var label1Rgb = word[label1.Text];
label1.ForeColor = Color.FromArgb(label1Rgb[0], label1Rgb[1],label1Rgb[2]);

Пример:

using System.Collections.Generic;
using System.Drawing;

namespace ClassEtStruct
{
    class Program
    {
        static void Main(string[] args)
        {

            string[] optionsList = new[] { "Hello", "Bye" };

            Dictionary<string, int[]> word = new Dictionary<string, int[]>()
                {
                    {"Hello", new int[] { 144 /*red*/ , 144 /*green*/, 153 /*blue*/ } },
                    {"Bye", new int[] {25, 127, 229} }
                };

            foreach (var option in optionsList)
            {
                int[] colorSettingFromDictionaary = word[option];
                int red = colorSettingFromDictionaary[0];
                int green = colorSettingFromDictionaary[1];
                int blue = colorSettingFromDictionaary[2];

                Color color = Color.FromArgb(colorSettingFromDictionaary[0], colorSettingFromDictionaary[1], colorSettingFromDictionaary[2]);
            }
        }
    }
}
...