我的问题是我正在尝试将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
提前致谢。
答案 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组成的字符串 组件名称及其值。'