.NETでドラッグできる図形を作るには?

解決


Rob  2006-06-16 01:09:42  No: 131869

Form(のPictureBox1)上に、複数の図形を描いて、各々をドラッグして
自由に移動させたいのですが、どのようにすればよいのでしょうか?

VB6だったら、Shapeコントロールがありますから、Shapeに対するマウス
イベントでドラッグする処理が出来るとおもうのですが、

.NETだと例えば↓のように描いてしまうと
Dim g As Graphics = Graphics.FromImage(PictureBox1.Image)
g.FillRectangle(sb, 100, 100, 200, 200)
描いた図形をオブジェクトとして捕らえて、マウスでドラッグできないと思います。

簡単な例でよろしいので、.NET上で作成した図形(例えば円)を
任意の位置までマウスでドラッグするための方法をお教えください


特攻隊長まるるう  2006-06-16 01:37:50  No: 131870

消して(マウスの位置に)描けばいいだけでは?


Rob  2006-06-16 01:51:04  No: 131871

図形が1つならば、それでも問題が無いように思います。

しかし、複数個図形が散らばっている場合、その中の一つの図形をマウスで選択しているのかを判断できるものなのでしょうか?  (複雑な条件文を書かなければならないような気もします)

よろしければ、この部分に対してもフォローして頂けると助かります。


特攻隊長まるるう  2006-06-16 02:01:07  No: 131872

ドラッグするのでは?
マウスクリックした位置にあった図形を対象とするだけでは?
他の図形は座標を覚えておいて前と同じ位置に描くだけだと
思いますが。


通ってみた  2006-06-16 02:06:29  No: 131873

回答ではありませんが、VB6のShapeコントロールにもイベントがありませんので簡単にはできません


Rob  2006-06-16 02:18:53  No: 131874

色々聞いて回りましたが、自分でコントロールを作るしかないとの話を受けました。

>特攻隊長さま
その方法は最初に考えたのですが、円の中をクリックしたかの判定をするのは処理が重たくなるのかなぁと感じた次第です。円が1000個とかになると判定する回数が多くなってしまうのかなぁと…。

>通ってみたさま
VB6でも、簡単にはできないのですか…。Borland系とは全く違うので戸惑い中です。


特攻隊長まるるう  2006-06-16 02:24:02  No: 131875

>円の中をクリックしたかの判定をするのは処理が重たくなるのかなぁと感じた次第です。
1000個判定してどのくらいの時間が掛かったのですか?


Rob  2006-06-17 00:16:52  No: 131876

MouseMoveやOnpaintイベントを組み合わせれば出来ますね。

Delphiでは円状のコントロール(Delphiコンポーネント)を利用したのですが
作り方が全く違うわけですか。

でも、VBやVCの作り方の方がある種  正しいのかもしれません。

>特攻さま
仮定の話なので、1000個はやった事ないです。
円なら円内をクリックしたか判定条件書くのも楽ですが、
星型形状とかになると図形の内側外側を判定する条件文を
記述するのが大変になってきそうですね


Rob  2006-06-20 02:14:58  No: 131877

結局、良いサンプルを見つけました。
http://www.shoeisha.com/mag/windev/library/870511.asp


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加