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

非表示でのクリック

環境/言語:[Visual Basic.NET]
分類:[.NET]

はじめまして。
ボタンを配置・VisibleをFalseにして、ボタン(のある位置)の上で
クリックした時にButton_Clickイベントを呼ぶ方法はあるのでしょうか。
(ボタンである必要はないので、ピクチャーボックスとかでもいいのですが)
一つだけだったらフォームのクリックした場所を調べて手動でやってもいいのですが、
いくつもそういう物を作りたいので。分かる方がいたらよろしくお願いします。
ラベルでどう?
返信ありがとうございます。
すみません、説明が足りませんでした。
やりたいのは、フォームに背景と文字をDrawで描画して、
文字の部分をクリックしたらイベントが起こるようにする事です。
ラベルで文字を書いた場合下の背景が消えてしまう(透過が出来ない)ので無理です。
他に何か方法はないでしょうか。
> やりたいのは、フォームに背景と文字をDrawで描画して、
> 文字の部分をクリックしたらイベントが起こるようにする事です。

普通にMouseDownイベントでクリックされた座標を求め、その座標が文字を含むRectangle内であれば処理をするみたいな感じではどうでしょうか?
やはりそれしかないでしょうか。
そのようなコントロールをたくさん作りたいので(大体3~40個)、
クリックするたびに一つ一つ確認していくと動作が遅くなると思ったのですが。
> ラベルで文字を書いた場合下の背景が消えてしまう(透過が出来ない)ので無理です。
とのことですが、次のTips は確認したでしょうか?
http://dobon.net/vb/dotnet/control/labelonpicturebox.html
この方法を使えば透過できるのではないでしょうか。

蛇足かも知れませんが、
> そのようなコントロールをたくさん作りたいので(大体3~40個)、
> クリックするたびに一つ一つ確認していくと動作が遅くなると思ったのですが。
ということについて。私自身、以前Rectangle を用いてこのようなプログラムを
作成したことがあります。このときは約100個の図形でしたが、ほとんど
遅延は確認できませんでした。ちなみにPCは celeron 700MHz という
古いものでしたが・・・。
したがって、確認する際はどちらの方法を用いても構わないと思います。
ピクチャーボックスを使うのではなく、DrawImageでフォームに直接描画するので、透過が出来ないんです。
では、対して速度が変わらないのであればMouseDownを使ってみる事にします。
ところで少し話が変わってしまうのですが、Rectangleを用いるというのはどのような方法なのでしょうか?
↓のような取得の仕方しか思いつかないのですが・・・。
If X < 0 And X > 10 And Y < 0 And Y > 10 Then
'処理
ElseIf X < ...
そちらを詳しく教えていただけますでしょうか。
> ↓のような取得の仕方しか思いつかないのですが・・・。
> If X < 0 And X > 10 And Y < 0 And Y > 10 Then
> '処理
> ElseIf X < ...
> そちらを詳しく教えていただけますでしょうか。
大体こんな感じでいいのでは?
ただ、
・判定するメソッド
・処理をする部分(特定のメソッドを含むインタフェイスなど)
を分離させればもっと分かり易くなると思います。
このあたりは貴方の感性(or規則)で決まるかと・・

※.NETならAndAlsoなどというのもあるんでしたっけ?
 ショートサーキット出来そうなので、効果的にそちらを使った方が速いかもしれません。
■No12114に返信(黄泉さんの記事)
> ↓のような取得の仕方しか思いつかないのですが・・・。
> If X < 0 And X > 10 And Y < 0 And Y > 10 Then
> '処理
> ElseIf X < ...
> そちらを詳しく教えていただけますでしょうか。

Rectangle.Containsメソッドなんかもありますので、定義したRectangleを配列に入れておいて、ぐるぐる回しながらチェックするなんてことを私は思いつきました。30〜40個ぐらいでしたら、さほど重くならないと想像しますが、保証はできません。(^^;
返信ありがとうございます。
Rectangle.Containsを使うと簡単に座標を確認出来るんですね。
今のところ全く動作に支障は無い様なので、とりあえずこれを使いたいと思います。
色々とアドバイスしていただいてありがとうございました。
また何かありましたらよろしくお願いします。
解決済み!

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