Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将单击事件处理程序指定给绘制矩形的一部分?_C#_Winforms - Fatal编程技术网

C# 如何将单击事件处理程序指定给绘制矩形的一部分?

C# 如何将单击事件处理程序指定给绘制矩形的一部分?,c#,winforms,C#,Winforms,假设我使用.NET图形类绘制一个矩形 然后,我如何分配一个事件,以便如果用户单击某个点或某个点范围,就会发生一些事情(单击事件处理程序) 我通过C#和事件部分阅读CLR,我从我所读的内容中想到了这个场景 这方面的代码示例将真正提高我对C#/.NET中事件的理解 谢谢您可以指定Click事件处理程序来控制谁的曲面将用于绘制矩形。 下面是一个小例子: 当你们点击矩形内部的表单时,它将被绘制成红色边框;当你们点击外部的表单时,它将被绘制成黑色边框 public partial class Form1

假设我使用.NET图形类绘制一个矩形

然后,我如何分配一个事件,以便如果用户单击某个点或某个点范围,就会发生一些事情(单击事件处理程序)

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

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


谢谢

您可以指定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();
    }
}
方法将光标坐标转换为控制相对坐标。也就是说,如果光标位于屏幕上的(screenX,screenY)位置,它可以位于相对于窗体左上角的(formX,formY)位置。我们需要调用它,将光标位置带入矩形使用的坐标系中

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