C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

LineShapeの移動

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■89266 / inTopicNo.1)  LineShapeの移動
  
□投稿者/ セボ (1回)-(2018/11/15(Thu) 05:01:30)

分類:[.NET 全般] 

お世話になります。

タイトルに書いたように実現したいことはPictureBox上のLineShapeをマウスドラッグでドラッグドロップ移動させる事です。
正確に言うと移動自体は出来る事は出来るんですが、その手段の質問です。


PictureBoxで始点と終点をクリックで指定させてLineShapeで線を引きます。

ここまでは問題ありません。


直リンクが良いのか分かりませんが

http://blog.hiros-dot.net/?p=6378

ここを参考にして移動を実装してみました。
実際、移動は出来ないのかと言えば出来ます。
この方法は今回とは別で、テキストボックスやパネル等の比較的幅や高さのあるコントロールですと問題ありません。


ですがLineShapeの場合、本当のBorder部分???でしかMouseMoveが発生しないので少しでも線からずれるとMouseMoveが発生しなくなり移動が出来ません。
極端、まっすぐ縦に1pxの線を引いていた場合は(実装的にはないんですが)左右への移動は出来ないことになります。
実際は3px程度の線を多用する事になるのでほぼ状況は変わらないんですが・・・

これをどうにかしたく、MouseDownの時点でMouseMoveをPictureboxに追加したらどうか?とか試してみたんですがLineShapeでMouseDownさせてそのままはみ出させる?と、一度MouseUpさせてからでないとPictureboxではMouseMoveが発生しないように見受けられました。

何か良い方法はありませんでしょうか?

引用返信 編集キー/
■89267 / inTopicNo.2)  Re[1]: LineShapeの移動
□投稿者/ shu (1154回)-(2018/11/15(Thu) 07:32:26)
No89266 (セボ さん) に返信

PictureBoxでのMouseMoveでLineShapeに近づいたら一時的にLineShapeを太くして
離れたときと、ドラッグが終了時に太さを戻すなどどうでしょう?
引用返信 編集キー/
■89269 / inTopicNo.3)  Re[1]: LineShapeの移動
□投稿者/ 魔界の仮面弁士 (1936回)-(2018/11/15(Thu) 10:13:19)
No89266 (セボ さん) に返信
> タイトルに書いたように実現したいことはPictureBox上のLineShapeをマウスドラッグでドラッグドロップ移動させる事です。

どの LineShape でしょうか?

ここでいう LineShape というのが、Microsoft.VisualBasic.PowerPacks.LineShape クラスの事を
指しているのだとしたら、Visual Studio のフォームデザイナからでは、
PictureBox の上に載せたり、あるいは重ねて配置したりすることはできなかったはずです。

デザイナではなく、コードから配置するのであれば、
 Controls.Add(pictureBox1)
 pictureBox1.Controls.Add(shapeContainer1)
 shapeContainer1.Shapes.Add(lineShape1)
などとして配置できますけれども…。



> LineShapeの場合、本当のBorder部分???でしかMouseMoveが発生しないので少しでも線からずれるとMouseMoveが発生しなくなり移動が出来ません。

Microsoft.VisualBasic.PowerPacks.LineShape の場合、
線幅が 4px 未満な垂直線だったとしても、余裕を持たせて
その左右に 1px 程度のクリック可能領域が持たせてあります。

この程度では不十分な場合、LineShape の HitTest メソッドをオーバーライドすることで
クリッカブル領域のサイズを拡張することができます。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ