ToString再次回到颜色(Visual Basic 2008)

时间:2012-03-20 16:58:50

标签: .net vb.net string visual-studio

我的问题是我正在尝试将String解析为System.Drawing.Color。我试着设置一个简单的记事本,这是我的代码的一部分:

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

提前致谢。

4 个答案:

答案 0 :(得分:5)

当你使用cdlg.Color.ToString时,它并没有真正将它转换为它之后可以读取的字符串。它只是将它转换为“color [Yellow]”

如果您想使用Color.FromName,则必须将“黄色”传递给它,否则会返回意外的内容。可能是一个默认值为o的颜色对象。

我建议您使用ColorConverter

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

这将返回一个字符串“Yellow”,您可以随意使用。

'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)

您还可以使用子字符串在“Color [Yellow]”中获取“Yellow”部分。 :P

答案 1 :(得分:3)

您需要获取Color 对象才能将其分配给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

答案 2 :(得分:1)

这是WinForms还是WPF?

在WinForms中,有一个Color.FromName可以将知道的颜色名称转换回颜色。所以你可以这样做:

Color.FromName("SlateBlue")

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

答案 3 :(得分:0)

只要名称合适,我希望如果您使用ToString**)并且不使用它,则可以使用Color.FromName方法。虽然你必须要小心;如果reciente内容完全可以编辑,那么您可能会遇到一些麻烦,当然,您应该尝试转换回工作,但可能不会期待它来。

** Color.ToString可能会返回其他的内容,而不是明确的颜色名称:

  

'如果创建了Color,则为此Color的名称的字符串   从预定义的颜色使用FromName方法或   FromKnownColor方法;否则,由ARGB组成的字符串   组件名称及其值。'