作者peiga (做自己)
看板C_Sharp
标题Re: 画框框问题
时间Sat Mar 14 22:33:57 2009
※ 引述《LLL333 (数学很重要)》之铭言:
: 我想画个能拖曳的矩形, 可是以下的程式码跑出来是
: 拖曳的时候会有矩形出现, 但是滑鼠停住时(此时左键还按着),
: 矩形就消失了, 请问要怎麽做才能让矩形的形状一直出现
: private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
: {
: if ((e.Button == MouseButtons.Left) && enable)
: {
: Graphics g = this.pictureBox1.CreateGraphics();
: Pen p = new Pen(Color.Red);
: //计算矩形位置
: tempX = e.X;
: tempY = e.Y;
: tempX = Clamp(tempX, 0, 319);
: tempY = Clamp(tempY, 0, 239);
: width = Math.Abs(tempX - OldX);
: height = Math.Abs(tempY - OldY);
: if (tempX > OldX)
: tempX = OldX;
: if (tempY > OldY)
: tempY = OldY;
: g.DrawRectangle(p, tempX , tempY , width, height);
: this.pictureBox1.Invalidate();
: }
: }
其实有很多方法,实作的方法都大同小异
这里我选择继承一个PictureBox
以下Source code是我凭印象写的,很抱歉目前手上没Visual Studio
也许语法上有错,请各位前辈见谅
然各位前辈有更好的作法,也请指教
谢谢!
public class pb : PictureBox
{
Rectangle block;
bool isMouseDown;
Point ptBegin, ptEnd;
override OnPaint(object sender, PaintEventArgs pe)
{
if (block != null)
pe.Graphics.DrawRectangle(Pens.White, block);
}
//参数我就省略不打了,请原谅我的懒:P
override OnMouseDown(......)
{
isMouseDown = true;
ptBeg = new Point(e.X, e.Y);
}
override OnMouseMove(....)
{
if (isMouseDown)
{
ptEnd = new Point(e.X, e.Y);
Block = getRect(ptBeg, ptEnd);
invalidate();
}
}
override OnMouseUp(.....)
{
isMouseDown = false;
}
Rectangle getRect(Point begin, Point end)
{
//这里实作取得2个point间的rectangle
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.137.134.49