想象一下,我使用.NET圖形類來繪製一個矩形。如何將點擊事件處理程序分配給繪製的矩形的一部分?
我怎麼能分配一個事件,以便如果用戶點擊某個點或某個點範圍,會發生什麼事情(點擊事件處理程序)?
我正在通過C#和事件部分閱讀CLR,我從我讀過的內容中想到了這個場景。
這樣的代碼示例將真正提高我對C#/ .NET中事件的理解。
謝謝
想象一下,我使用.NET圖形類來繪製一個矩形。如何將點擊事件處理程序分配給繪製的矩形的一部分?
我怎麼能分配一個事件,以便如果用戶點擊某個點或某個點範圍,會發生什麼事情(點擊事件處理程序)?
我正在通過C#和事件部分閱讀CLR,我從我讀過的內容中想到了這個場景。
這樣的代碼示例將真正提高我對C#/ .NET中事件的理解。
謝謝
PointToClient方法將光標座標轉換爲控制相對座標。即如果光標位於屏幕上的(screenX,screenY)位置,則它可以位於(formX,formY)相對於窗體左上角的位置。我們需要調用它來將光標位置移動到矩形所使用的座標系中。
Invalidate方法使控制重繪自己。在我們的例子中,它會觸發OnPaint事件處理程序以重新繪製具有新邊框顏色的矩形。
您可以分配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();
}
}