2012-01-03 4 views
1

私のアプリケーションでは、TabPageの一部がプログラムによってTabControlに追加されます。各ページにはListViewと2 ListBox ESが含まれます:ListBoxアイテムをColorにキャストする

//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; 

P.S:インデックス1と2のページに色と記号が追加されています。

ありがとうございました。

+0

'typeof(KnownColor)'と 'Color color'の関係は何ですか?それとも、それは単にタイプミスですか?また、あなたは無効キャスト例外のメッセージを提供していただけますか? – nemesv

+0

エラーメッセージが '指定されたキャストが有効ではありません.'その' typeof(KnownColor) 'リストボックスのデータソースとして、すべての色を返します。これはSymbolTypeと同じです。セコンドコードでリストボックス内の選択された色の名前から色をつくろうとしています –

答えて

3

完全に有効な実行時例外が発生しています。 System.Drawing.KnownColorenumで、System.Drawing.Colorstruct)にキャストされていますが、2つの非常に異なるタイプです。

ヒントはあなた自身のコードです。あなたが列挙からあなたListBoxDataSourceを設定している:あなたはあなたのデータソースを変更できない場合

DataSource = Enum.GetValues(typeof (KnownColor)) 

、私はあなたがColor.FromKnownColor()メソッドを使用してキャストする前のKnownColorからColorに変換するお勧めします。

+0

あなたは眠りのない夜から私を救った!ありがとう!!! –

+0

あなたは歓迎です:)。 – Abbas

関連する問題