编辑版本:
无需过多假设您想要做什么:
private void panel1_Click(object sender, EventArgs e) {
using (Graphics g = this.panel1.CreateGraphics()) {
Pen pen = new Pen(Color.Black, 2);
Brush brush = new SolidBrush(this.panel1.BackgroundColor);
g.DrawRectangle(pen, 100,100, 100, 200);
pen.Dispose();
}
}
您的代码不起作用,因为它正在窗口上绘制矩形(此),然后绘制的矩形被面板隐藏。
通常 对于这样一个简单的情况覆盖 Paint 对于在面板上绘制一个矩形来说太费力了。但是,以这种方式绘制矩形是可行的,但是当重新绘制表单时,矩形将消失(例如,通过最小化并随后再次显示表单。如果矩形必须持久存在,则必须使用 Paint 方法,为此,您可以必须(例如)在单击事件中创建矩形,然后在绘制事件中绘制它。(参见roygbiv这种方法的解决方案)。注意:如果您使用 Paint 方法,则应尽可能保持其高效,因为 Paint 方法会被频繁调用。
Edit 2
您不需要清除背景,因为您的矩形将始终绘制在同一位置。为了在用户点击的点绘制矩形(这是一个假设,这就是你想要的)您应该将代码移至鼠标按下事件,例如:
private void panel1_MouseDown(object sender, MouseEventArgs e) {
using (Graphics g = this.panel1.CreateGraphics()) {
Pen pen = new Pen(Color.Black, 2);
Brush brush = new SolidBrush(this.panel1.BackColor);
g.FillRectangle(brush, this.panel1.Bounds); // redraws background
g.DrawRectangle(pen, e.X, e.Y, 20, 20);
pen.Dispose();
brush.Dispose();
}
}