【问题标题】:How to convert ColorDialog result as hex?如何将 ColorDialog 结果转换为十六进制?
【发布时间】:2015-12-13 05:09:05
【问题描述】:

我想在我的应用程序中实现一个基本的ColorPicker,我需要的是当用户点击TextBox 时出现ColorPicker 并且当用户选择颜色时TextBox BackColor 获得选择的颜色,我也想在 TextBox 中显示所选颜色的值。这就是我实际所做的:

Private Sub resource_colore_TextChanged(sender As Object, e As EventArgs) Handles resource_colore.Click

    Dim cDialog As New ColorDialog
    Dim conv As New ColorConverter

    cDialog.Color = resource_colore.BackColor   

    If (cDialog.ShowDialog() = DialogResult.OK) Then
        resource_colore.BackColor = cDialog.Color 
        Dim hex_color As String = Hex(cDialog.Color)
        resource_colore.Text = hex_color
    End If

End Sub

现在问题是我得到了这个异常:

无法转换“颜色”类型中的参数“数字”

在这一行:

Dim hex_color As String = Hex(cDialog.Color)

究竟是什么意思?我该如何解决?

【问题讨论】:

  • 颜色是一种结构(类型),所以不能直接转换。您需要将 R G B 值转换为 String.Format("#{0:X2}{1:X2}{2:X2}", myClr.R, myClr.G, myClr.B)
  • 我看到了这个,但 System.Drawing.Color 再次与 ColorDialog 没有什么不同?
  • 错误信息似乎很有描述性。 Hex 函数需要一个数字,而您正在输入一个完全不同的东西(整个颜色)。是的,System.Drawing.Color 与ColorDialog 不同,但与ColorDialog.Color 完全相同。在问这里之前,您不应该做一个小的调试/理解/研究工作吗?
  • 你也可以使用ColorTranslator.ToHtml(Color.FromArgb(colorDialog.Color.ToArgb()))

标签: vb.net


【解决方案1】:

正如 Plutonix 所建议的,答案很简单,我这样修复:

Private Sub resource_colore_TextChanged(sender As Object, e As EventArgs) Handles resource_colore.Click

    Dim cDialog As New ColorDialog
    Dim conv As New ColorConverter

    cDialog.Color = resource_colore.BackColor  

    If (cDialog.ShowDialog() = DialogResult.OK) Then
        resource_colore.BackColor = cDialog.Color 
        Dim hex_color As String = String.Format("#{0:X2}{1:X2}{2:X2}", cDialog.Color.R, cDialog.Color.G, cDialog.Color.B)
        resource_colore.Text = hex_color
    End If

End Sub

谢谢大家

【讨论】:

    猜你喜欢
    • 2015-09-13
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多