DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Brushの色の判定

  • 題名: Brushの色の判定
  • 著者: ポン
  • 日時: 2005/05/14 12:19:02
  • ID: 10788
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[XP VB.NET 1.1]
分類:[.NET]

Brushの種類と色を判定するため、下記のようなコードを書きました。何故か IF文でFalseと判定されてしまいます。
MyBrush の型は、ハッチブラシも入るようにしたいため、どうしても「Dim MyBrush As Brush」と宣言したいのですが...
どのように比較したらいいでしょうか?

Dim MyBrush As Brush

MyBrush = New SolidBrush(Color.Transparent)

If Equals(MyBrush, New SolidBrush(Color.Transparent)) Then
Console.WriteLine("判定:同じ")
Else
Console.WriteLine("判定:違う")
End If
その比較は同じブラシかどうかの比較ですよね?
自分でブラシを作成しているのですから、どんなブラシか把握できるでしょう。


#ちゃんとDisposeしてますか?
Dim MyBrush As Brush

MyBrush = New SolidBrush(Color.Transparent)

If Equals(MyBrush.Color, Color.Transparent) Then
.  Console.WriteLine("判定:同じ")
Else
.  Console.WriteLine("判定:違う")
End If
  • 題名: Re[2]: Brushの色の判定
  • 著者: ポン
  • 日時: 2005/05/14 14:28:04
  • ID: 10792
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No10790に返信(中博俊さんの記事)
> その比較は同じブラシかどうかの比較ですよね?
> 自分でブラシを作成しているのですから、どんなブラシか把握できるでしょう。

書き方が悪くてすみません。さっきのコードは実験用に簡単に書いたものです。
実際には、自分でブラシを作成するのではなく、
下記のように、クラスのプロパテイにしていて、どんなブラシが入るか予見不能な状態です。


Private _Brush As System.Drawing.Brush

Public Property MyBrush() As System.Drawing.Brush
Get
Return _Brush
End Get
Set(ByVal Value As System.Drawing.Brush)
_Brush = Value
End Set
End Property


> #ちゃんとDisposeしてますか?

#上記の場合でも、Property のSet の直前でDisposeは必要ですか?
■No10791に返信(旅人さんの記事)
> Dim MyBrush As Brush
>
> MyBrush = New SolidBrush(Color.Transparent)
>
> If Equals(MyBrush.Color, Color.Transparent) Then
> .  Console.WriteLine("判定:同じ")
> Else
> .  Console.WriteLine("判定:違う")
> End If
>

旅人さん すみません。
MyBrush.Color のところで「'Color' は 'System.Drawing.Brush' のメンバではありません。」となってしまいます。
Brush - Equals : 2 つの Object インスタンスが等しいかどうかを判断します。
Color - Equals : 指定されたオブジェクトが Color 構造体かどうか、また、この Color 構造体と等価かどうかをテストします。

同じ、Equals でも クラスによって比較するものが違うんですね。


Dim MyBrush As Brush
MyBrush = New SolidBrush(Color.Transparent)

If MyBrush.GetType.Equals(GetType(SolidBrush)) Then
Dim MySolidBrush As SolidBrush = MyBrush

If Equals(MySolidBrush.Color, Color.Transparent) Then
Console.WriteLine("判定:同じ")
Else
Console.WriteLine("判定:違う")
End If
End If

Brushを、いったんSolidBrushに変換して Colorで比較する方法で、できるようになりました。
でも、本当は SolidBrush型に変換しなくても Brush型から直接Colorを参照又は比較できる方法があるんじゃないかなと思っています。個人的にはなんかしっくりしないですが、一応解決しました。

中さん、旅人さん、ありがとうございました。
解決済み!
> でも、本当は SolidBrush型に変換しなくても Brush型から直接Colorを参照又は
>比較できる方法があるんじゃないかなと思っています。

無いと思う。
Brush にもイロイロあるので。

Brush の Color プロパティが意味を持つのは、そのブラシが純色ブラシ=SolidBrush だからです。

仮に、TextureBrush に Color プロパティが生えてたとしても、個人的には、その用途は直感的に分からないです。

DOBON.NET | プログラミング道 | プログラミング掲示板