Приведение элементов ListBox к цвету - PullRequest
1 голос
/ 04 января 2012

В моем приложении, в зависимости от потребностей, некоторые TabPage с будут добавлены к TabControl программно.Каждая страница будет содержать ListView и два ListBox es:

//Color Picker
var colorBox = new ListBox
{
    DataSource = Enum.GetValues(typeof (KnownColor)),
    Height = 40,
    Width = tabFiles.Width/3,
    Dock = DockStyle.Bottom
};

page.Controls.Add(colorBox);

//Style Picker
var styleBox = new ListBox
{
    DataSource = Enum.GetValues(typeof(SymbolType)),
    Height = 40,
    Width = tabFiles.Width / 3,
    Dock = DockStyle.Bottom
};

page.Controls.Add(styleBox);

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

Color color = (Color)((ListBox)tabFiles.TabPages[i].Controls[1]).SelectedItem;
SymbolType symbol = (SymbolType)((ListBox)tabFiles.TabPages[i].Controls[2]).SelectedItem;

PS: Я знаю, что цвет и символ добавляются на страницу с индексами 1 и 2 соответственно.

Спасибо.

1 Ответ

3 голосов
/ 04 января 2012

Вы получаете совершенно допустимое исключение во время выполнения.System.Drawing.KnownColor - это enum, который вы приводите к System.Drawing.Color, то есть struct, это два совершенно разных типа.

Подсказка есть в вашем собственном коде.Вы устанавливаете DataSource вашего ListBox из перечисления:

DataSource = Enum.GetValues(typeof (KnownColor))

Если вы не можете изменить свой источник данных, я предлагаю вам преобразовать из KnownColor в Color перед приведением, используя метод Color.FromKnownColor().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...