C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Color構造体の色の比較

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■100471 / inTopicNo.1)  Color構造体の色の比較
  
□投稿者/ PAPIKO (1回)-(2022/08/17(Wed) 16:24:38)

分類:[VB.NET/VB2005 以降] 

VS2019
こんにちは。
Color構造体の色の比較で悩んでいます。
具体的には、

Dim color1 As Color = Color.Red
Dim color2 As Color = Color.FromArgb(255, 0, 0)
Dim comp As Boolean = (color1 = color2)

のようにイコール比較すると、compはFalseになってしまいます。
color1もcolor2もARGB値は同じなのですが、
多分Color構造体を構成する何かの値(色名?)が異なるのだと思います。

各変数のA, R, G, Bそれぞれの値を比較すればいいということは分かっているのですが、
もっと簡単に二つのColor構造体のARGB値が同じかどうかを比較する方法はないでしょうか?
引用返信 編集キー/
■100472 / inTopicNo.2)  Re[1]: Color構造体の色の比較
□投稿者/ Hongliang (1250回)-(2022/08/17(Wed) 16:45:29)
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.color.equals
ここの注釈にあるように、.ToArgb()したもの同士を比較すればいいでしょう。
引用返信 編集キー/
■100474 / inTopicNo.3)  Re[1]: Color構造体の色の比較
□投稿者/ 魔界の仮面弁士 (3450回)-(2022/08/17(Wed) 17:06:25)
No100471 (PAPIKO さん) に返信
> のようにイコール比較すると、compはFalseになってしまいます。

端的に言えば、color1.Name と color2.Name が異なるからです。

正確にはもう少し複雑ですが。
https://referencesource.microsoft.com/#System.Drawing/commonui/System/Drawing/Color.cs,1818


> color1もcolor2もARGB値は同じなのですが、
color1 と color2 を同一視したいのであれば、.ToArgb() を比較するという手もあります。


> 多分Color構造体を構成する何かの値(色名?)が異なるのだと思います。
Name と関連性の深い情報として、
IsKnownColor, IsNamedColor, IsSystemColor ってのがあります。

たとえば、
 Dim c1 As Color = SystemColors.ActiveCaption
とした場合、c1.Name は "ActiveCaption" になります。

そして c1.ToArgb() が返す色は、OS の画面設定によって異なりますので、
システム色に関しては、ARGB を比較するだけでは同一性を保てません。
そのため、このように Name を意識した色判定が行われるようになっているのでしょう。
引用返信 編集キー/
■100476 / inTopicNo.4)  Re[2]: Color構造体の色の比較
□投稿者/ PAPIKO (2回)-(2022/08/17(Wed) 17:21:05)
Hongliangさま、魔界の仮面弁士さま、ご回答ありがとうございました。
.ToArgb()ですね。
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ