我有一个主面板,我创建了一些可以拖动的面板。移动。 (用户可以添加面板)
以下是我的公共类ObjetGrafcet的代码:Panel,
(UserControlGraf.SelectionActuelle是添加了用户选择面板的List)
public ObjetGrafcet()
{
Redimension = false;
isClicked = false;
onMove = false;
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
foreach (Control ctr in UserControlGraf.SelectionActuelle)
{
if (onMove)
{
ctr.Left = ctr.Left - (ctr.Left % UserControlGraf.IntervalleGrilleX);
ctr.Top = ctr.Top - (ctr.Top % UserControlGraf.IntervalleGrilleY);
}
if(ctr is Ligne)
{
ctr.Left += 1;
}
}
Redimension = false;
onMove = false;
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (e.Button == MouseButtons.Left && !UserControlGraf.SelectionActuelle.Contains(this))
{
isClicked = true;
Cursor.Current = Cursors.Default;
UserControlGraf.SelectionActuelle.Add(this);
//Permet la selection d'un seul objet grafcet
if (UserControlGraf.SelectionActuelle.Count == 2)
{
((ObjetGrafcet)UserControlGraf.SelectionActuelle[0]).isClicked = false;
((ObjetGrafcet)UserControlGraf.SelectionActuelle[0]).Refresh();
UserControlGraf.SelectionActuelle.RemoveAt(0);
}
if(this is TextFieldGraf)
{
if(e.X > this.Width-10 && e.Y > this.Height - 10)
{
Redimension = true;
}
}
this.Refresh();
}
DepartSouris = new Point(e.X, e.Y);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (this is TextFieldGraf)
{
if (e.X > this.Width - 10 && e.Y > this.Height - 10)
{
Redimension = true;
}
}
if (Redimension)
{
this.Width = e.X - (e.X % UserControlGraf.IntervalleGrilleX);
this.Height = e.Y - (e.Y % UserControlGraf.IntervalleGrilleY);
}
else
{
foreach (Control ctr in UserControlGraf.SelectionActuelle)
{
ctr.Left = e.X + ctr.Left - DepartSouris.X;
ctr.Top = e.Y + ctr.Top - DepartSouris.Y;
}
onMove = true;
}
}
this.Refresh();
}
问题在于,当我试图移动我的面板时,它的确很难。它不像我想要的那样流畅。我通过我的foreach是原因(可能因为它是一个缓慢的功能?)但我不知道如何以不同的方式做。
我的代码有什么问题?
以下是我获得的截图。我的行是继承自ObjetGrafcet的pobject。这是当我移动超过4/5行。 http://image.noelshack.com/fichiers/2016/52/1483006418-bugerror.png