[英]Drawing concentric circle in c# windows forms application
我试图在组框上画一个圆,当文本框输入更改时,圆的大小应该立即更改。
private void groupBox1_Paint(object sender, PaintEventArgs e)
{
//CIRCLE
Graphics graphics = e.Graphics;
Pen p = new Pen(Color.Black, 1);
float S = float.Parse(textBox1.Text);
Rectangle r = new Rectangle(50, 50, (int)S, (int)S);
graphics.DrawEllipse(p, r);
graphics.Dispose();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
groupBox1.Paint += new PaintEventHandler(this.groupBox1_Paint);
this.Controls.Add(groupBox1);
}
您永远不会直接调用Paint方法。 取而代之的是,通常让Windows通过调用groupBox1.Invalidate();
来决定何时重绘groupBox1.Invalidate();
。
原因是该控件可能被隐藏,或者有太多的绘画请求挂起。 然后Windows可能决定删除其中一些。
不要使用this.Controls.Add(groupBox1);
重新添加您的控件this.Controls.Add(groupBox1);
!
不要重新订阅事件处理程序。 可以在构造函数中使用+=
一次订阅,也可以通过将属性窗口切换到事件(单击Flash符号),然后双击paint事件,从表单设计器中进行订阅。
private void textBox1_TextChanged(object sender, EventArgs e)
{
groupBox1.Invalidate();
}
如果刷新必须真的非常即时(但是如果您正在制作动画,则可能只是这种情况),请调用groupBox1.Refresh();
;
请参阅: Control.Invalidate,Control.Update和Control.Refresh有什么区别?
事件的工作方式如下:希望在事件发生时做一些事情的方法,使用+=
订阅事件(仅一次!)。 您可以在代码中手动执行此操作,也可以在表单设计器中轻松执行此操作。 然后一些逻辑引发该事件。 在这种情况下,逻辑将隐藏在Invalidate
方法中。 然后,将执行所有订阅事件的方法。
请参阅: 如何:引发和消费事件 。
通过搜索C#事件,您会发现很多教程和示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.