2012-01-03 54 views
1

在我的應用程序中,根據需要,一些TabPage將以編程方式添加到TabControl。每個頁面將包含ListView和兩個ListBox ES:將ListBox項目投射到顏色

//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 respectivly。

謝謝。

+0

'typeof(KnownColor)'和'Color color'之間的關係是什麼?還是僅僅是一個錯字?你也可以提供無效轉換異常的消息嗎? – nemesv 2012-01-03 22:09:17

+0

錯誤消息是'指定的轉換無效。''typeof(KnownColor)'將所有顏色作爲列表框的數據源返回,與SymbolType相同。在第二代碼我試圖在列表框中選擇一種顏色名稱 – 2012-01-03 22:15:44

回答

3

您正在獲得完全有效的運行時異常。 System.Drawing.KnownColor是一個enum,您將投射到System.Drawing.Color這是一個struct,它們是兩種非常不同的類型。

提示是在你自己的代碼中。您是從一個枚舉設置你ListBoxDataSource

DataSource = Enum.GetValues(typeof (KnownColor)) 

如果你不能改變你的數據源,我建議你從KnownColor使用Color.FromKnownColor()方法鑄造之前轉換爲彩色。

+0

你從沒有睡眠的夜晚中拯救了我!謝謝!!! – 2012-01-03 22:30:54

+0

不客氣:)。 – Abbas 2012-01-03 22:37:57