移動PictureBoxマウス
-
05-09-2019 - |
質問
の開発をしているアプリをwindows mobile(Compact Framework2.0)に変更しました。でサポートとPictureBox.
に移動しようとしていのイメージPictureBoxがわからないかで選べるの穴PictureBox.
い、その結果が、先ほど任天堂さんのイベント:
private void imagenMapa_MouseMove(object sender, MouseEventArgs e)
{
imagenMapa.Left = e.X;
imagenMapa.Top = e.Y;
this.Refresh();
}
ものを動かPictureBoxで点滅動毎することができます。
うになっているが悪いのでしょうか。
解決
の e.X
や e.Y
相対的に写真ボックスなど場合にはマウスの左上のボックス、0,0).
の値 imagenMapa.Left
や imagenMapa.Top
相対的に(またはずの制御を含む imagenMapa
)
しようとした場合にミックスの値からこの二つのシステムなしに変換うジャンプのようだ見て).
まあの変換マウスの位置が同じ座標系での使用によるものが含まれる画像ボックス。
を使用できる imagenMapa.PointToScreen
のマウス座標ときの画面座標の(または Cursor.Position
の位置を直接) yourForm.PointToClient
後になりの座標です。
ご注意お客様の必要に応じて、また"動く画像内の管理をオーバー/取扱いに Paint
イベント 制御およびイメージを描きます。かった場合には、代わりに、できかけのpicturebox座標を用いて計算で求めたものが何に使うときに呼び graphicsObject.DrawImage
.
他のヒント
実際のコードは(.NET Framework 3.5が必要です以降、これはコンパクトFrameworkで利用可能であるかどうかわからない)...
// Global Variables
private int _xPos;
private int _yPos;
private bool _dragging;
// Register mouse events
pictureBox.MouseUp += (sender, args) =>
{
var c = sender as PictureBox;
if (null == c) return;
_dragging = false;
};
pictureBox.MouseDown += (sender, args) =>
{
if (args.Button != MouseButtons.Left) return;
_dragging = true;
_xPos = args.X;
_yPos = args.Y;
};
pictureBox.MouseMove += (sender, args) =>
{
var c = sender as PictureBox;
if (!_dragging || null == c) return;
c.Top = args.Y + c.Top - _yPos;
c.Left = args.X + c.Left - _xPos;
};
e.X&e.Yがピクチャ、imagenMapa.Left&imagenMapa.Topの座標空間であり、フォームの座標空間です。 : - )
また、ちらつきを助けるかもしれない、重バッファするフォームを設定することを忘れないでください、それを実際の位置決めのために、私はダニエルL'sの提案が好き
数学を抱擁!
control.Left = control.Left - (_lastMousePos.X - currentMousePos.X);
control.Top = control.Top - (_lastMousePos.Y - currentMousePos.Y);
クイック説明: あなたは、マウスの位置との差分を取得し、移動したいオブジェクトに適用します。
例: 古いマウスのX位置が382で、新しいものが385である場合には、違いがある-3。コントロール現在のX位置は、10 10である場合 - (-3)= 13
理由: それは何のために働く、と常に前後に座標を変換するよりもはるかに安いです。
実際にあなたがやっていることが正しいです。しかし、あなたはのPictureBoxへのMouseMoveプロパティを与えました。フォーム(バックグラウンド)にそのプロパティを与える必要があります。
例:
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
imagenMapa.Left = e.X;
imagenMapa.Top = e.Y;
}