Ваше текущее решение может иногда работать, однако событие может быть вызвано очень часто, когда вы пытаетесь перетащить элемент управления и привязать его к координатам, которые вы указали в операторах if
.
Рекомендуетсярешение:
Я бы предложил вам использовать событие MouseMove
в форме или родительском элементе, который содержит элемент управления, который вы хотите перетащить.Значения также должны быть настраиваемыми, а не жестко закодированными.Код изменился бы немного (сравнивая текущие координаты мыши вместо свойств Left
и Top
элемента управления), и он должен работать правильно.
ОБНОВЛЕНИЕ:
Я исправил ваш код, и теперь он работает, позволяя вам поместить элемент управления в одно из трех мест ( y равно 138 , 148 или 158 ).Я изменяю его лишь немного, чтобы не требовать изменения большого количества кода, но я настоятельно рекомендую использовать первый описанный метод:).
int currentY;
bool isDragging = false;
private void OnDrag(object sender, MouseEventArgs e)
{
if (isDragging)
{
//calculate Y position relative to parent
int parentY = this.Top + e.Y;
if (parentY < currentY)
{
if (parentY > 158 && parentY >= 148)
{
if (this.Top != 148)
{
currentY += (this.Top - 148);
this.Top = 148;
}
}
else if (parentY < 148 /*&& parentY >= 138*/)
{
if (this.Top != 138)
{
currentY += (this.Top - 138);
this.Top = 138;
}
}
//And so on
}
else if (parentY > currentY)
{
if (/*parentY <= 158 &&*/ parentY >= 148)
{
currentY += (this.Top - 158);
this.Top = 158;
}
else if (parentY < 148 && parentY >= 138)
{
currentY += (this.Top - 148);
this.Top = 148;
}
//And so on
}
}
}
public void MusicNote_MouseDown(object sender, MouseEventArgs e)
{
currentY = this.Top + e.Y;
this.Capture = true;
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
isDragging = true;
}
this.MouseMove += new MouseEventHandler(OnDrag);
}
public void MusicNote_MouseUp(object sender, MouseEventArgs e)
{
isDragging = false;
this.Capture = false;
this.MouseMove -= new MouseEventHandler(OnDrag);
}
Предыдущее решение, однако, сработало бы, вероятно, болеекак хочешь.