Преобразуйте строку в имя Кистей/Цвета кисти в C#

Примечание: Неинициализированное смещение строки: *

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

Считаем, что вы пытаетесь показать каждую букву из $string

$string = 'ABCD'; 
for ($i=0, $len = strlen($string); $i <= $len; $i++){
    echo "$string[$i] \n"; 
}

. Вышеприведенный пример сгенерирует ( онлайн-демонстрацию ):

A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X

И, как только скрипт заканчивается эхом D, вы получите ошибку, потому что внутри цикла for() вы сказали PHP, чтобы показать вам от первого до пятого символа строки из 'ABCD' Что, существует, но поскольку цикл начинает отсчитываться от 0 и эха D к моменту достижения значения 4, он выдает ошибку смещения.

Аналогичные ошибки:

38
задан Clinton Pierce 30 April 2012 в 16:47
поделиться

8 ответов

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

// best, using Color's static method
Color red1 = Color.FromName("Red");

// using a ColorConverter
TypeConverter tc1 = TypeDescriptor.GetConverter(typeof(Color)); // ..or..
TypeConverter tc2 = new ColorConverter();
Color red2 = (Color)tc.ConvertFromString("Red");

// using Reflection on Color or Brush
Color red3 = (Color)typeof(Color).GetProperty("Red").GetValue(null, null);

// in WPF you can use a BrushConverter
SolidColorBrush redBrush = (SolidColorBrush)new BrushConverter().ConvertFromString("Red");
70
ответ дан 27 November 2019 в 03:02
поделиться

D'oh. Через некоторое время взгляда я нашел:

 Color.FromName(a.Value)

После попадения в "штангу". Оттуда это - короткий шаг к:

 color = new SolidBrush(Color.FromName(a.Value));

я оставлю этот вопрос здесь для других....

8
ответ дан Clinton Pierce 27 November 2019 в 03:02
поделиться

Вы могли использовать отражение для этого:

Type t = typeof(Brushes);
Brush b = (Brush)t.GetProperty("Red").GetValue(null, null);

, Конечно, Вы захотите некоторую обработку ошибок / проверка диапазона, если строка будет неправильной.

2
ответ дан Jon B 27 November 2019 в 03:02
поделиться

Я соглашаюсь, что использование TypeConverters является лучшим методом:

 Color c = (Color)TypeDescriptor.GetConverter(typeof(Color)).ConvertFromString("Red");
 return new Brush(c);
1
ответ дан Brian Rudolph 27 November 2019 в 03:02
поделиться

Попытайтесь использовать TypeConverter. Пример:

var tc = TypeDescriptor.GetConverter(typeof(Brush));

Другая альтернатива должна использовать отражение и пробежаться через свойства в SystemBrushes.

0
ответ дан leppie 27 November 2019 в 03:02
поделиться

Если Вы хотите, можно расширить это еще больше и позволить им определять значения для R, G и значения B. Тогда Вы просто называете Цвет. FromArgb (интервал r, интервал g, интервал b);

0
ответ дан BFree 27 November 2019 в 03:02
поделиться

Строка для чистки:

myTextBlock.Foreground = new BrushConverter().ConvertFromString("#FFFFFF") as SolidColorBrush;

Вот мой случай!

43
ответ дан 27 November 2019 в 03:02
поделиться

A brush can be declared like this

Brush myBrush = new SolidBrush(Color.FromName("Red"));
12
ответ дан 27 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: