2016-08-25 60 views
-2

我編寫了一個程序從ColorDialogBox獲取Color,並使用ColorTranslator.ToHtml將其轉換爲十六進制值,但不返回十六進制值,而是返回純色名稱。有任何解決這個問題的方法嗎 ?在C#中將顏色名稱轉換爲十六進制

這裏是我的代碼:

private void chooseClr_Click(object sender, EventArgs e) { 

     colorDialog1.ShowDialog(); 
     Color checking = colorDialog1.Color; 
     string hexColor = ColorTranslator.ToHtml(checking); 
     MessageBox.Show(hexColor); 
    } 
+1

也許你應該嘗試閱讀['ColorTranslator.ToHtml'文檔】(https://msdn.microsoft.com/en-us/l ibrary/system.drawing.colortranslator.tohtml(v = vs.110).aspx):「此方法將Color結構轉換爲HTML顏色的字符串表示形式。這是常用的顏色名稱,如「紅色」,「藍色」或「綠色」,而不是數字顏色值的字符串表示形式,如「FF33AA」。「 –

+0

可能的重複[如何轉換顏色名稱到相應的十六進制表示?](http://stackoverflow.com/questions/8336375/how-to-convert-color-name-to-the-corresponding-hexadecimal-representation) – j4rey89

+2

可能重複的[Convert .Net顏色對象到十六進制代碼和返回](http://stackoverflow.com/questions/982028/convert-net-color-objects-to-hex-codes-and-back) –

回答

0

它返回純色的名字,如果它是一個有效的HTML顏色。
如果你的顏色是自定義的(沒有HTML名稱),那麼它返回HEX值。

至於我,最快,最簡單的解決方法是編寫自定義功能:

public static class HexColorExtensions 
{ 
    public static string ToHex(this Color c) => $"#{c.R:X2}{c.G:X2}{c.B:X2}"; 
} 

現在,你可以簡單地使用這種方式:

Console.WriteLine(Color.Green.ToHex()); // #008000 
Console.WriteLine(Color.Black.ToHex()); // #000000 
Console.WriteLine(Color.FromArgb(1, 2, 3).ToHex()); // #010203 
+0

給信貸在信貸到期http:// stackoverflow。 com/a/37821008/7545489 – Denny

+0

@Denny我不記得複製他人的答案,所以我相信我t只是類似的:)特別是,考慮到這是一個單線。 –

0

這一種顏色轉換成十六進制字符串

MessageBox.Show((colorDialog1.Color.ToArgb() & 0x00FFFFFF).ToString("X6")); 
相關問題