ラベルを六角形に描写

タグの編集
投稿者 tecc  (社会人) 投稿日時 2010/2/23 19:49:43
 EE

ラベルを横長の六角形で描写させたいです。
まずはとりあえず六角形を描写できれば良いかな?と思い下記コードを書きましたが
描写されません。
そこで、コードの間違いをご指摘頂きたく思っています。
        Dim gp As New GraphicsPath

        Dim points(5) As Point
        gp.StartFigure()
        points(0) = New Point(lbl.Left, lbl.Top)
        points(1) = New Point(50, 50)
        points(2) = New Point(50, 66)
        points(3) = New Point(66, 70)
        points(4) = New Point(83, 66)
        points(5) = New Point(83, 50)
        gp.AddPolygon(points)
        gp.CloseFigure()

        Dim rgn As New Region(gp)
'(lbl as Label) 
        lbl.Region = rgn
        rgn.Dispose()


宜しく御願いします。
投稿者 るしぇ  (社会人) 投稿日時 2010/2/23 20:08:05
ラベルなんかでやるから、AutoSize = True のまま実行してるとか?
投稿者 tecc  (社会人) 投稿日時 2010/2/23 20:13:55
返信ありがとうございます。
確認した所、autosizeはfalseでした。
投稿者 るしぇ  (社会人) 投稿日時 2010/2/23 20:16:04
じゃあ単純に Point 指定した座標がラベルの範囲外なのでは?
ラベルを十分に大きくしてみたら?
投稿者 tecc  (社会人) 投稿日時 2010/2/23 20:24:40
コード的には間違いはないという事ですね
ラベルの大きさやpoint構造体を変更してみます。
ありがとうございました。
投稿者 るしぇ  (社会人) 投稿日時 2010/2/23 20:29:52
>コード的には間違いはないという事ですね
ボクが描画系のコードを参考にしているDOBONさんのサンプルコードと
若干手順が違うので言い切れない部分はあるものの、まぁ、問題ないかなってレベルです。
http://dobon.net/vb/dotnet/form/formregion.html

>points(0) = New Point(lbl.Left, lbl.Top)
上記コードを見ると、多分、フォームの座標系とラベルの座標系がごっちゃになってます。
ラベルの BackColor を変更すれば何かは表示されると思います。
投稿者 tecc  (社会人) 投稿日時 2010/2/23 20:53:41
ありがとうございました。

描写はできました。

   points(0) = New Point(10, 100)
   points(1) = New Point(60, 150)
   points(2) = New Point(500, 150)
   points(3) = New Point(550, 100)
   points(4) = New Point(500, 50)
   points(5) = New Point(60, 50)
投稿者 るきお  (社会人) 投稿日時 2010/2/23 22:15:15
るしぇさんが既に指摘済みなのでまとめ(?)ですが、

New Point(lbl.Left, lbl.Top)はフォーム上に配置されたlblの左上の座標を指定していることになりますが、ここではlbl上の座標を指定すべきという間違いが1つありました。
つまり、lblの左上の座標はそのlblがフォーム上のどこに配置されていても(0, 0)です。

今回は、これが原因だったでしょうか?

あとは、指定している図形の大きさよりlblの大きさが小さい場合は、途中までしか表示されないので
おかしいように感じることがあります。

コントロールの形を変えるといろいろと外見をカスタマイズできて、
ひいては操作性や見かけのわかりやすさを向上させることができ、私は結構好きです。
投稿者 tecc  (社会人) 投稿日時 2010/2/23 22:46:56
>>lblの左上の座標はそのlblがフォーム上のどこに配置されていても(0, 0)です。
実際には lbl.left, lbl.top には値が代入されていましたが、これが原因でした。

あとは、指定している図形の大きさよりlblの大きさが小さい場合は、
途中までしか表示されないのでおかしいように感じることがあります。

上記に関しては
Point構造体の配列内のXの最大値とYの最大値を取得し
lblのsizeプロパティに代入しようと思います。

次はbordercolorの色を変更しようと考えています。
お世話になるかもしれませんがこちらも考えてから質問するようにしますので
その折は宜しく御願いします。