投稿者 masaX  (社会人) 投稿日時 2016/11/10 19:18:05
カラーコードについてなのですが
Colorから、10進数のカラーコードを取り出した場合、例えば赤の場合ですと負の数字で「-65536」と出る場合と正の数字で「16711680」と出る場合があるのですが、どんな場合に負になるのか?、あるいは正になるのかが分かりません。

下記のプログラムはあまり意味の無いプログラムですが、その状態を再現するために書いてみました。例えば、最初のカラーコードも、後のカラーコードもどちらも正の数にするか、あるいはどちらも負の数にする方法は在るのでしょうか?

**サンプルコード*****************************

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        'カラーダイアログを表示
        Color1.ShowDialog()
        Dim col As Color = Color1.Color

        'カラーコードを取り出す
        Dim coltx10 As String = col.ToArgb

        MsgBox("最初のカラーコード=" & coltx10)



        Dim txHex As String = Hex(coltx10)
        Dim myRGB(2) As String

        '16進数の下6桁を取り出す
        Dim colTx As String = Microsoft.VisualBasic.Right(txHex, 6)
        'RGB に該当する値を取り出す。
        myRGB(0) = Mid(colTx, 1, 2)
        myRGB(1) = Mid(colTx, 3, 2)
        myRGB(2) = Mid$(colTx, 5, 2)

        'RGB 形式でバックカラーを表示
        Dim tx As String = CStr(CByte("&H" & myRGB(0))) & "," & CStr(CByte("&H" & myRGB(1))) & "," & CStr(CByte("&H" & myRGB(2)))

        'RGBのカラーコードから「R」「G」「B」それぞれを16進数で取り出し
        Dim tt(2) As String
        tt = Split(tx, ",")

        Dim hx(2) As String
        hx(0) = Hex(tt(0))
        If Len(hx(0)) = 1 Then
            hx(0) = "0" & hx(0)
        End If
        hx(1) = Hex(tt(1))
        If Len(hx(1)) = 1 Then
            hx(1) = "0" & hx(1)
        End If
        hx(2) = Hex(tt(2))
        If Len(hx(2)) = 1 Then
            hx(2) = "0" & hx(2)
        End If

        '16進数にする
        Dim ans As String = hx(0) & hx(1) & hx(2)

        Dim col2 As Color

        '16進数のマークを付けて10進数に変換
        Dim num16 As Long = CLng("&H" & colTx)

        '変換した10進数をIntegerに変換してカラーに変換
        col2 = Color.FromArgb(CInt(num16))
        Text1.ForeColor = col2

        'Text1のForeColorから10進数のカラーコードを取り出す
        Dim coltx10_2 As String = Text1.ForeColor.ToArgb
        MsgBox("後のカラーコード=" & coltx10_2)

        Dim col_A As Color = Color.FromArgb(CInt(coltx10))
        Dim col_B As Color = Color.FromArgb(CInt(coltx10_2))

        LabelMae.ForeColor = col_A
        LabelAto.ForeColor = col_B
   '↑どちらのラベルも同じ色になる

    End Sub
******************************************