您正在做的是“异步”绘制表单(来自 OnPaint 方法)。你看,OnPaint 方法是 Windows 窗体绘制整个窗体所依赖的方法。当您的 From 发生某些事情时,它会失效并再次调用 OnPaint。如果在该方法中没有绘制某些内容,那么在此之后它将不存在。
如果您希望按钮触发某些内容永久显示,那么您需要做的是将该对象添加到某处的集合中,或设置与其相关的变量。然后调用 Refresh() 调用 Invalidate() 和 Update() 然后,在 OnPaint 期间,绘制该对象(省略号)。
如果您希望它在您的表单发生某些事情后仍然存在,例如最小化,您必须在 OnPaint 期间绘制它。
这是我的建议:
public partial class Form1 : Form
{
Rectangle r = Rectangle.Empty;
Pen redPen = new Pen(Color.Red);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
r = new Rectangle(50, 50, 100, 100);
Refresh();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (r != Rectangle.Empty)
{
e.Graphics.DrawRectangle(redPen, r);
}
}
}