2012-03-20 104 views
2

我的問題是,我試圖解析一個字符串到System.Drawing.Color。我試圖設置一個簡單的記事本,這裏是我的代碼的一部分:ToString再次回到顏色(Visual Basic 2008)

Private Sub ToolStripMenuItem6_Click(ByVal sender As System.Object, ByVal e As  System.EventArgs) Handles Colorfuente2.Click 
    Try 
     Dim cdlg As New ColorDialog 
     cdlg.ShowDialog() 
     cdlg.FullOpen = True 
     cdlg.AnyColor = True 
     ColorFuente1.Visible = True 
     Colorfuente2.Visible = False 
     If Windows.Forms.DialogResult.OK Then 
      RichTextBox1.ForeColor = cdlg.Color 
      reciente2.Text = cdlg.Color.ToString 'I've converted this tostring, so that recent colors are shown as text, this is what im trying to reverse 
     End If 
    Catch ex As Exception 
    End Try 
End Sub 

    If Reciente1.Text = "Ninguno" Then 
     MessageBox.Show("No hay colores recientes", "Bloc de notas", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 
    Else : RichTextBox1.ForeColor = Reciente1.Text 'I get the error here, I have to change this text to a System.Drawing.Color. 
    End If 

在此先感謝。

回答

5

當您使用cdlg.Color.ToString時,它並未真正將其轉換爲之後可以讀取的字符串。它只是將其轉換爲類似「顏色[黃色]」

如果你想使用Color.FromName,你將不得不通過它「黃色」,否則會返回一些意想不到的事情。可能是一個默認值爲無值的顏色對象。

我建議你使用ColorConverter

Dim colorConv As New ColorConverter 
TextBox1.Text = colorConv.ConvertToString(cdg.Color) 

這將返回一個字符串「黃」,你可以,但是你喜歡的方式使用。

'Using FormName 
TextBox1.BackColor = Color.FromName(TextBox1.Text) 
'Using the color converter again (recommended). 
Dim colorConv As New ColorConverter 
TextBox1.BackColor = colorConv.ConvertFromString(TextBox1.Text) 

您還可以使用子在「顏色[黃]」得到「黃色」一部分。 :P

0

只要名字是正確的,我期望它會是如果你使用ToString**),而不是弄亂它,否則你可以使用Color.FromName方法。雖然你必須小心,如果reciente的內容是可編輯的,你可能會遇到一些麻煩,所以很自然,你應該嘗試的轉換回去工作,但也許不是期望它。

**這是可能的Color.ToString返回的東西其他比色的確切名稱:

'就是這個顏色的名稱,如果顏色是從創建 的字符串通過使用FromName方法或FromKnownColor方法來預定義顏色;否則,由ARGB 組件名稱及其值組成的字符串。

+0

好的,謝謝大家的回答,但現在我又遇到了另外一個問題,每次按「reciente1」時顏色變黑,而不是按鈕文字的顏色。如果有人能給我一個解決方案,請。再次感謝所有提前。 – minimino 2012-03-20 18:36:41

3

你需要得到一個顏色對象,以便將其分配給ForeColor

Color.FromName的方法將採取string並返回匹配Color對象(假設它存在):

If Reciente1.Text = "Ninguno" Then 
    MessageBox.Show("No hay colores recientes", "Bloc de notas", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 
Else 
    Dim col As Color = Color.FromName(Reciente1.Text) 
    RichTextBox1.ForeColor = col 
End If 
+0

好的,謝謝你所有回答,但現在我有另一個問題,每次按「reciente1」顏色變黑,而不是按鈕文本的顏色。如果有人能給我一個解決方案,請。 再次感謝所有提前。 – minimino 2012-03-20 17:43:22

1

這是的WinForms或WPF?

在WinForms中,有一個Color.FromName會將知道的顏色名稱轉換回顏色。所以你可以這樣做:

Color.FromName("SlateBlue") 

在WPF中,我相信你可以使用ColorConverter類。

+0

好的,謝謝你所有的回答,但現在我有另一個問題,每次按「reciente1」顏色變黑,而不是按鈕文本的顏色。如果有人能給我一個解決方案,請。再次感謝所有提前。 – minimino 2012-03-20 18:36:55

+0

@minimino:聽起來像是一個單獨的問題。 「reciente1」的點擊處理程序的代碼是什麼?什麼「變黑」? – 2012-03-20 19:43:44