[英]How to Draw a Rubber Band Selection Rectangle accurately on a Rotated Canvas?
[英]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;
}
}
更新:您可以使用Picturebox
或Label
(使用Autosize=false
),而不是Panel
,它是一个Container
控件,并不是真正要在上面绘制; 两者都具有开箱即用的DoubleBuffered
属性,并且比Panels
更好地支持绘图。
如果问题只是闪烁。 您可能希望将 Forms 双缓冲区属性设置为 true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.