繁体   English   中英

C# 如何在面板上绘制一个橡皮筋选择矩形,就像在 Windows 资源管理器中使用的那样?

[英]C# How to Draw a Rubber Band Selection Rectangle on Panel, like one used in Windows Explorer?

我有一个流布局面板,其中包含一些用户控件。 我想使用鼠标使用矩形选择来选择这些控件,就像在 windows 文件资源管理器中使用的一样。 我已经尝试过这些:https: //support.microsoft.com/en-us/kb/314945但它非常闪烁并且没有用(我可能错了,请纠正我)。 请有任何好的例子。

绘制橡皮筋矩形是这样完成的:

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        panel1.Refresh();
        using (Graphics g = panel1.CreateGraphics())
        {
            Rectangle rect = GetRectangle(mdown, e.Location);
            g.DrawRectangle(Pens.Red, rect);
        }
    }

}

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
    mdown = e.Location;
}

它使用一个辅助函数:

static public Rectangle GetRectangle(Point p1, Point p2)
{
    return new Rectangle(Math.Min(p1.X, p2.X), Math.Min(p1.Y, p2.Y),
        Math.Abs(p1.X - p2.X), Math.Abs(p1.Y - p2.Y));
}

我没有从中得到任何闪烁。 如果你这样做了,也许你已经编写了Paint事件,你可能想要使用双缓冲Panel

class DrawPanel : Panel 
{
   public DrawPanel()
    {
        DoubleBuffered = true;
    }
}

更新:您可以使用PictureboxLabel (使用Autosize=false ),而不是Panel ,它是一个Container控件,并不是真正要在上面绘制; 两者都具有开箱即用的DoubleBuffered属性,并且比Panels更好地支持绘图。

如果问题只是闪烁。 您可能希望将 Forms 双缓冲区属性设置为 true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM