我有一个Windows窗体应用程序,需要能够选择窗体上的对象,以同样的方式,你选择文件在桌面上左键单击并拖动文件,如下所示:
下面的代码是我自己写的,但是很糟糕。这不对我现在不太担心“选择”部分,我主要关心的是我如何像这样绘制?
private void splitContainer1_Panel1_MouseMove(object sender, MouseEventArgs e)
{
if (mouseDown)
{
// TODO: Draw Rectangle (so you can select elements on the canvas).
Graphics graphics = Graphics.FromHwnd(splitContainer1.Panel1.Handle);
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Pen pen = new Pen(Color.SlateBlue, 0.5f);
graphics.PageUnit = GraphicsUnit.Pixel;
graphics.DrawRectangle(pen, e.X, e.Y, (e.Location.X + e.X) - lastCursorLocation.X, (e.Location.Y + e.Y) - lastCursorLocation.Y);
}
}
更新
private void splitContainer1_Panel1_Paint(object sender,PaintEventArgs e){//TODO:绘制矩形(以便您可以选择画布上的元素)。
Graphics graphics = Graphics.FromHwnd(splitContainer1.Panel1.Handle);
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Pen pen = new Pen(Color.SlateBlue, 0.5f);
graphics.PageUnit = GraphicsUnit.Pixel;
graphics.DrawRectangle(pen, 1, 1, 1, 1);
Invalidate();
}
在将代码放置到Paint事件中并调用Invalidate()之后,窗体上将不会绘制任何内容。很明显我做错了什么,但是是什么?
3条答案
按热度按时间dpiehjr41#
检查以下线程。您正在查找的对象称为
rubber band
:filled rubber band in Winforms Application
yk9xbfzb2#
链接没有死,只是存档了:)
https://web.archive.org/web/20110317124106/http://support.microsoft.com/kb/314945
3yhwsihp3#
我最终使用了一些我在Microsoft Connect网站上找到的代码:
http://support.microsoft.com/kb/314945