想实现随着鼠标的拖动,画出椭圆,好像就差一点了。。。

苦茶爷爷 2013-12-27 09:34:26
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

Point P1 = new Point();
Point P2 = new Point();
bool isMouseDown = false;

private void Form1_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;

}

private void Form1_Load(object sender, EventArgs e)
{

}

private void Form1_Paint(object sender, PaintEventArgs e)
{

Graphics g = e.Graphics;
// Rectangle rect1 = new Rectangle(P1.X, P1.Y, P2.Y - P1.Y, P2.Y - P1.Y);
// Rectangle rect1 = new Rectangle(1, 1, 100, 100);
DrawTY(g, P1.X, P1.Y, P2.Y - P1.Y, P2.Y - P1.Y);
}

private void DrawTY(Graphics g, int a,int b,int c,int d )
{
GraphicsPath roundedRect = new GraphicsPath();
roundedRect.AddArc(a, b, c, d, 0, 360);
roundedRect.CloseFigure();

//从路径中创建区域
Region pathRegion = new Region(roundedRect);
// g.FillRegion(new SolidBrush(Color.Blue), pathRegion);
g.DrawPath(Pens.Blue, roundedRect);

}

private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (isMouseDown == false)
{
isMouseDown = true;

P1.X = e.X;
P1.Y = e.Y;
}
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (isMouseDown == true)
{

P2.X = e.X;
P2.Y = e.Y;

this.Invalidate();
}
}
}


我调用DrawTY函数,传入几个值,但是报错

为什么,我直接绘制椭圆是好的,但是通过获取坐标来绘制有问题呢?
...全文
174 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
苦茶爷爷 2013-12-27
  • 打赏
  • 举报
回复
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        Point P1 = new Point();
        Point P2 = new Point();
        bool isMouseDown = false;

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            isMouseDown = false;
            
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            
            Graphics g = e.Graphics;

        //    g.DrawEllipse(new Pen(Color.Red, 3), 1, 1, 5, 5);
            g.DrawRectangle(new Pen(Color.Blue, 3), P1.X > P2.X ? P2.X : P1.X, P1.Y > P2.Y ? P2.Y : P1.Y, Math.Abs(P2.X - P1.X), Math.Abs(P2.Y - P1.Y));

            
        }

        

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (isMouseDown == false)
            {
                isMouseDown = true;

                P1.X = e.X;
                P1.Y = e.Y;
            }
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (isMouseDown == true)
            {

                P2.X = e.X;
                P2.Y = e.Y;

                this.Invalidate();
            }
        }
    }
谢谢上面的同学,但是还有问题。 大家看我上面那一行代码,可以实现矩形的。
小猪八Q 2013-12-27
  • 打赏
  • 举报
回复

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (isMouseDown == true)
            {

                P2.X = e.X;
                P2.Y = e.Y;
                DrawTY(this.CreateGraphics(), P2.X, P2.Y, 100, 100);
                this.Invalidate();
            }
        }
修改了下你的代码,在MouseMove中加入了Move的事件,这样才能看到圆,当然在窗体重绘过程中就有消失了,所以是闪烁的,但是并没有出现你所说的问题
苦茶爷爷 2013-12-27
  • 打赏
  • 举报
回复
请大家回复一下哈,谢谢!
苦茶爷爷 2013-12-27
  • 打赏
  • 举报
回复
自己顶!!!!
苦茶爷爷 2013-12-27
  • 打赏
  • 举报
回复
请问还有人帮帮忙吗?

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧