大小从上到下

时间:2017-06-21 18:33:10

标签: c# winforms

这更像是一种方法论问题。我知道如何创建一个可以从各个方面扩展的控件,但我不明白为什么这个代码在没有重绘问题(抖动)的情况下不会流畅地工作。它仅从顶部缩放面板,但在此过程中会产生抖动。我错过了什么?

    public partial class Form1 : Form
{
    Point MousePoint = new Point();
    public Form1()
    {
        InitializeComponent();
        panel1.MouseMove += Panel1_MouseMove;
        panel1.MouseDown += Panel1_MouseDown;
        panel1.Width = 100;
        panel1.Height = 100;
    }

    private void Panel1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            MousePoint = e.Location;
        }
    }

    private void Panel1_MouseMove(object sender, MouseEventArgs e)
    {
        if(e.Button == MouseButtons.Left)
        {
            panel1.Top = e.Location.Y + panel1.Location.Y - MousePoint.Y;
            panel1.Height = panel1.Height - e.Y + MousePoint.Y;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您正在更改两个不同的属性:顶部,然后是高度。这可能导致"抖动"你看到了。

请尝试使用SetBounds调用:

 panel1.SetBounds(panel1.Left,
                  e.Location.Y + panel1.Location.Y - mousePoint.Y,
                  panel1.Width,
                  panel1.Height - e.Y + mousePoint.Y);

如果面板内部包含了锚定等控件,则可能会影响调整大小的平滑度。