Конвертировать int в Color в Windows Forms - PullRequest
4 голосов
/ 13 июня 2011

У меня есть значение в строке, равное -16777056, но как мне привести его к цвету?

Примерно так:

Color = (Color) Convert.ToInt32(((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]) })

Ответы [ 4 ]

30 голосов
/ 14 июня 2011

Преобразование между цветами и числами называется цвето-графическая синестезия , и человек с таким состоянием может быть в состоянии определить цвет (или даже форму или «чувство») числа.Однако здесь есть один хитрый момент: он никогда не был идентифицирован на компьютере (только у людей).Кроме того, это состояние, как правило, связано с генетикой у людей, но сообщалось после психоделического употребления наркотиков.И хотя я бы никогда не предложил использовать нелегальные наркотики, я полагаю, что подсунуть вашему ЦП немного ЛСД может стоить того.

Еще одна трудность заключается в том, что у синестетов нет общего между ними, то естьчисло 6 для меня не того цвета, как для вас.Так что они могут отображаться на вашем компьютере иначе, чем на моем.(Вроде как «вау, чувак, как я могу знать, что вещи, которые для меня« синий »цвет не похожи на то, что я считаю« красным »для тебя?» Но опять же, мы вернулись к нелегальным наркотикам.)

Вот так я бы попытался преобразовать число в цвет.То есть, если ваш номер на самом деле не представляет собой что-то полезное, например, значение цвета ARGB.В этом случае вы можете использовать:

Color.FromArgb(numericValue);
9 голосов
/ 13 июня 2011

Попробуйте вместо этого:

var argb = Convert.ToInt32(
    ((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]);
Color = Color.FromArgb(argb);
6 голосов
/ 13 июня 2011

Ну, вы знаете, как цвет превратился в это целое число? Я предполагаю, что это значение ARGB, составленное из объединенных байтов.

Если это так, то это самый простой способ:

var myColor = Color.FromArgb(myColorInt);

, который будет интегрирован в вашу строку кода, например:

var myColor = Color.FromArgb(Convert.ToInt32(((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]) }));
1 голос
/ 13 июня 2011
Color myColor = Color.FromArgb(Convert.ToInt32(((DataRowView)  
    this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"])});

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

((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"] = 
    colorDialog.Color;

А затем прочитайте это обратно так:

Color myColor = 
    ((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"];

Таким образом, вы сохраняете его как Color, извлекаете его как Color и пропускаете промежуточные шаги преобразования.

Это может работать или не работать с некоторыми другими модификациями, в зависимости от того, будет ли ваш источник данных хранить Color вместо int, как он определен в настоящее время.

...