WPFとVBでアプリ作る準備その3、ImageコントロールにDragDeltaイベントがほしくて擬似DragDelta
前回
の続き
3回めになるコントロールのドラッグ移動
また少し思い描いていたものに近づいた
画像ファイルドロップで表示した画像をマウスドラッグできるようにするのに
ImageコントロールにDragDeltaイベントがあればいいなあ
でも方法がわからないなあってのが少しなんとかなったかも
動きは前回、前々回と全く同じはず
Imageを継承したクラスを作成して、OnMouseMoveメソッドを
Overridesして、その中でDragDeltaイベントを発生させて
DragDeltaイベントがあるように見せかけるっていうの
Public Class ExImage
Inherits Image
Public Event ExDragDelta(sender As Object, e As DragDeltaEventArgs)
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
RaiseEvent ExDragDelta(Me, New DragDeltaEventArgs(p.X, p.Y))
End Sub
End Class
こんなかんじ
もっとまともな方法があると思うんだけどわからないし
OverridesとかRaiseEventとか理解できていないんだけどね
今のところ期待通りに動いている
全体のコードの様子は
Imageクラスを継承して作ったExImageクラス
名前はExImageにした
DragDeltaEventArgsを引数に持たせたExDragDeltaと言う
名前を付けたイベントを宣言?しておく
OnMouseLeftButtonDownで
左クリックした時にクリックした位置を記録してOnMouseMoveで
マウスが動いた時に今の位置と記録した位置から移動距離を出して
RaiseEventでExDragDeltaを起動する、この時引数に移動距離を持たせる
ドラッグ事にマウスを早く動かし過ぎると動かしているコントロールから
マウスが離れないようにするために
左クリック時にMe.CaptureMouseでくっつけて
クリックを離した時にMe.ReleaseMouseCaptureで放している
デザイン画面
canvas1って言う名前をつけたCanvasを設置しただけ
VBコード
ドラッグ移動の部分は
まるでDragDeltaイベントが有るかのような振る舞いwなのでThumbコントロールの時と全く同じで簡潔になっている
今気づいた
やっていることはほとんど同じだから、あんまり変わらないかな?
今回の方法はよくわかっていないので
なにか気づいていない良くない副作用があるかもしれないけど
気に入っているからこれで行こうかなあと
参照したところは
VB イベントの作成 - Event, RaiseEvent, WithEventsアプリが作れるようになったのはこのVB中学校のおかげ
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard49.htm
あれから2年経ったけど未だに初級講座のところも理解できていないw
デリゲート…インターフェイス…マルチスレッド(゚д゚)?
WPF_test4 (master) - Visual Studio Team Services
https://gogowaten.visualstudio.com/DefaultCollection/WPF/_git/WPF_test4
Wpf_test55_Imageコントロールを擬似DragDeltaでマウスドラッグ移動
クラスを追加するときは
メニューのプロジェクト→クラスの追加
適当な名前(Class1とか)を付けて追加ボタン
作った後からクラスの名前を変える時は
クラスの名前を右クリック→名前の変更
クラスの名前が選択された状態になるので書き換える
エンターキーを押せば完了
このクラスを参照しているところも全て変更される
ファイル名?も変更する
→名前の変更
編集できるようになる
MouseMoveイベントの時の動作を改変する?には
OnMouseMoveメソッドをOverrides
Overridesって打ってスペース入れるとOverridesできるもの一覧が表示される続けてMoveって打つと
絞込される、OnMouseMoveを選択してTabキーを押すと
最低限必要なことなんだろうと思われるものが自動で入力される
WPFとVBでアプリ作る準備その4、コントロールを重ねた時の上下移動(ZOrder)はPanel.SetZIndex ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/13913897.html
2016年5月22日追記
WPFとVB.NET、ControlTemplateを使ったThumbを回転表示する時に回転させるのはどれがいいのか ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14157487.html