質問
このイベントを使用するとラベルが消えます。どうすればよいですか
private void label4_MouseMove(object sender, MouseEventArgs e)
{
label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
}
解決
label4
の場所はコンテナ( Form
または親コントロール)に対して相対的です。カーソルの位置は画面に対して相対的な場合があります。
場所を調整する必要があります。たとえば、コンテナが Form
である場合、画面内でその場所を検索し、それによって画面に対するカーソルの位置を計算できます。
これは原因の1つの可能性にすぎませんが、これはよく起こります:)
他のヒント
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;
}
フォームのPointToClient()関数を使用して、マウスのX / Y座標をフォームに関連するポイントに変換します。そうする必要があります。
編集:代わりにマウスイベントargsオブジェクトプロパティを使用します:
Label1.Location = New Point(e.X, e.Y)
PSはVBをご容赦ください。このPCにはC#はありません
要素の場所は、その親に対して相対的です。この場合、その場所としてマウスの絶対位置を使用しています。
マウスの位置を親要素の座標系に変換する必要があります。
PointToClient
ラベルの親要素のメソッド。
所属していません StackOverflow