как переместить метку на winform во время выполнения
Вопрос
с помощью этого события ярлык просто исчезает, как мне это сделать?
private void label4_MouseMove(object sender, MouseEventArgs e)
{
label4.Location = new Point(Cursor.Position.X, Cursor.Position.Y);
}
Решение
Расположение label4
относительно контейнера ( Form
или родительского элемента управления), положение курсора может быть относительно экрана.
Вам необходимо изменить местоположение. Например, если контейнер представляет собой Form
, вы можете найти его местоположение на экране и рассчитать с его помощью местоположение курсора относительно экрана.
Это только одна возможность по причине, но такая часто случается:)
Другие советы
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 мыши в точки, относящиеся к вашей форме, которые должны это делать.
Изменить. Вместо этого используйте свойства объекта аргументов мышиных событий:
Label1.Location = New Point(e.X, e.Y)
PS простите VB, нет C # на этом ПК
Расположение элемента относительно его родителя. В этом случае вы используете абсолютное положение мыши в качестве местоположения.
Вам нужно будет перевести положение мыши в систему координат родительского элемента.
Используйте PointToClient
в родительском элементе метки.