2008-12-12 27 views
3

想象一下,我使用.NET图形类来绘制一个矩形。如何将点击事件处理程序分配给绘制的矩形的一部分?

我怎么能分配一个事件,以便如果用户点击某个点或某个点范围,会发生什么事情(点击事件处理程序)?

我正在通过C#和事件部分阅读CLR,我从我读过的内容中想到了这个场景。

这样的代码示例将真正提高我对C#/ .NET中事件的理解。

谢谢

回答

0

PointToClient方法将光标坐标转换为控制相对坐标。即如果光标位于屏幕上的(screenX,screenY)位置,则它可以位于(formX,formY)相对于窗体左上角的位置。我们需要调用它来将光标位置移动到矩形所使用的坐标系中。

Invalidate方法使控制重绘自己。在我们的例子中,它会触发OnPaint事件处理程序以重新绘制具有新边框颜色的矩形。

5

您可以分配Click事件处理程序来控制其表面将用于绘制矩形。 这里是一个小例子: 当你点击矩形内部的窗体时,当你点击外部时,它将用红色边框绘制,它将用黑色边框绘制。

public partial class Form1 : Form 
{ 
    private Rectangle rect; 
    private Pen pen = Pens.Black; 

    public Form1() 
    { 
     InitializeComponent(); 
     rect = new Rectangle(10, 10, Width - 30, Height - 60); 
     Click += Form1_Click; 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 
     e.Graphics.DrawRectangle(pen, rect); 
    } 

    void Form1_Click(object sender, EventArgs e) 
    { 
     Point cursorPos = this.PointToClient(Cursor.Position); 
     if (rect.Contains(cursorPos)) 
     { 
      pen = Pens.Red; 
     } 
     else 
     { 
      pen = Pens.Black; 
     } 
     Invalidate(); 
    } 
} 
相关问题