このイベントを使用すると、ラベルが消えるだけですが、これをどのように行うのですか?
private void label4_MouseMove(object sender, MouseEventArgs e)
{
label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
}
handle these three event ...
Control actcontrol;
Point preloc;
void label1_Mousedown(object sender, MouseEventArgs e)
{
actcontrol = sender as Control;
preloc = e.Location;
Cursor = Cursors.Default;
}
void label1_MouseMove(object sender, MouseEventArgs e)
{
if (actcontrol == null || actcontrol != sender)
return;
var location = actcontrol.Location;
location.Offset(e.Location.X - preloc.X, e.Location.Y - preloc.Y);
actcontrol.Location = location;
}
void label1_MouseUp(object sender, MouseEventArgs e)
{
actcontrol = null;
Cursor = Cursors.Default;
}
の位置はlabel4
コンテナ(Form
または親コントロール)を基準にしており、カーソル位置は画面を基準にしている場合があります。
場所を調整する必要があります。たとえば、コンテナがのForm
場合、画面内でその場所を見つけて、画面に対するカーソルの位置を計算できます。
これは原因の唯一の可能性ですが、これはたくさん起こります:)
フォームのPointToClient()関数を使用して、マウスのX/Y座標をフォームに相対的なポイントに変換します。
編集:代わりにマウスイベント引数オブジェクトのプロパティを使用してください:
Label1.Location = New Point(e.X, e.Y)
PSはVBを許します、このPCにはC#はありません
要素の場所は、その親を基準にしています。この場合、マウスの絶対位置をその場所として使用していますが。
マウスの位置を親要素の座標系に変換する必要があります。
PointToClient
ラベルの親要素のメソッドを使用します。