2012-01-09 64 views
-2

我只是想在运行时动态绘制一个椭圆。 mouseclick然后mousemove然后鼠标释放就是它。但是,困惑的检测点(x,y)。有人可以帮我解决这个问题在面板上绘制一个动态椭圆

+0

哪个UI框架,您使用的? WPF? WinForms(GDI)? – ColinE 2012-01-09 11:50:51

+0

如果这是WinForms,那么您正在寻找['e.Location'](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.mouseeventargs.location.aspx)。 – 2012-01-09 11:56:18

+0

对不起朋友,sterday不可能早日回复 – 2012-01-10 07:21:03

回答

1

你基本上只需要记录MouseDown事件的起始点,这样就可以制作椭圆点,记录点来自MouseUp事件。

简单的演示:

public partial class Form1 : Form { 

    private Point _StartPoint; 
    private List<Rectangle> _Ovals = new List<Rectangle>(); 

    public Form1() { 
    InitializeComponent(); 

    this.MouseDown += new MouseEventHandler(Form1_MouseDown); 
    this.MouseUp += new MouseEventHandler(Form1_MouseUp); 
    this.Paint += new PaintEventHandler(Form1_Paint); 
    } 

    void Form1_Paint(object sender, PaintEventArgs e) { 
    foreach (Rectangle r in _Ovals) 
     e.Graphics.FillEllipse(Brushes.Red, r); 
    } 

    void Form1_MouseDown(object sender, MouseEventArgs e) { 
    if (e.Button == MouseButtons.Left) 
     _StartPoint = e.Location; 
    } 

    void Form1_MouseUp(object sender, MouseEventArgs e) { 
    if (e.Button == MouseButtons.Left) { 
     _Ovals.Add(MakeRectangle(_StartPoint, e.Location)); 
     this.Invalidate(); 
    } 
    } 

    private Rectangle MakeRectangle(Point p1, Point p2) { 
    int x = (p1.X < p2.X ? p1.X : p2.X); 
    int y = (p1.Y < p2.Y ? p1.Y : p2.Y); 
    int w = Math.Abs(p1.X - p2.X); 
    int h = Math.Abs(p1.Y - p2.Y); 
    return new Rectangle(x, y, w, h); 
    } 
} 
+0

这太好了...... – 2012-01-10 05:44:21