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

PictureBoxでの座標取得について

環境/言語:[XP SP3 / VB2005 ]
分類:[.NET]

お世話になります。

現在、PictureBoxに画像を表示し、特定の部分をクリックするとイベントが発生するというコードを書いています。

いわゆる、クリッカブルマップ的な事をしたいと思っています。

一つの画像を四角形で、10×10の100個に分割し、それぞれクリックすると違うイベントが発生する。

(PictureBoxに表示されている画像)
___________________
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_| ←それぞれの場所をクリックしたら別々のイベントが発生
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|_|_|_|


e.X e.Yで座標を判断して、MouseDownで取得といのは分かっているのですが、コードで書こうと思うと、いまいち分かりません。

判断は、

Select マウスがクリックされた座標

Case 一つめの四角形の中だったら
   'イベントの発生

Case 二つめの四角形の中だったら
'イベントの発生


こんな感じになるのでしょうか?

近いところで、検索して出てきた以下のBBSを参考にしているのですが、いまいち分かっていません。
http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200601/200601_06010096.html


どなたか、アドバイスよろしくお願い致します。
2009/05/11(Mon) 18:50:11 編集(投稿者)

■No24530に返信(山広さんの記事)
> 一つの画像を四角形で、10×10の100個に分割し、それぞれクリックすると違うイベントが発生する。

割り切れないサイズの画像(たとえば、7x16 ピクセルとか)のときに
どのように扱いたいのかにもよりますけれども、とりあえず一例として。


Private Event AreaClick(ByVal x As Integer, ByVal y As Integer)
Private Const xDiv As Integer = 10
Private Const yDiv As Integer = 10

Private Sub Form1_AreaClick(ByVal x As Integer, ByVal y As Integer) Handles Me.AreaClick
 Me.Text = String.Format("エリア {0},{1} がクリックされました。", x, y)
End Sub

Private Sub PictureBox1_MouseClick(ByVal sender As Object, ByVal e As MouseEventArgs) Handles PictureBox1.MouseClick
 Dim pb As PictureBox = DirectCast(sender, PictureBox)
 RaiseEvent AreaClick(e.Location.X \ CInt(pb.Width / xDiv), e.Location.Y \ CInt(pb.Height / yDiv))
End Sub
2009/05/11(Mon) 22:08:03 編集(投稿者)
■No24531に返信(魔界の仮面弁士さんの記事)
> 2009/05/11(Mon) 18:50:11 編集(投稿者)


魔界の仮面弁士さん、完璧でした。
有り難うございます。

そして、とても綺麗なコードですね。
私には当分書けそうもないコードです。

こういう時はこう書くのかと、とても勉強になりました。
解決済み!

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