希望你能帮助我。我必须画一些形状到一个面板,如椭圆,圆形,正方形等。这是我的代码:
private void Form1_Load(object sender, EventArgs e)
{
pnForm.BackColor = Color.White;
Graphics g = pnForm.CreateGraphics();
HatchBrush hb = new HatchBrush(HatchStyle.BackwardDiagonal, Color.Black, Color.White);
if (rbQuadrat.Checked == true)
{
g.FillRectangle(hb, 10, 10, 50, 50);
}
}我设置了单选按钮来在形状之间进行选择,但是当我检查正方形时,面板中什么也没有出现。我尝试了各种参数,如pnForm.ClientRecangle.Width/Height、其他数值等,但对我都不起作用。
PS。它不是"pnForm.Backcolor = Color.White",我在没有这段代码的情况下测试了它,它也不能工作。
编辑:我删除了if子句,现在它可以工作了。当我发现我的错误时,让你知道。
发布于 2014-04-08 15:15:16
从方法的名称判断,您的代码只在表单加载时被调用一次。Windows Forms/GDI是一种无状态绘图体系结构。它不知道如果checkbox的值发生变化,它是否应该重新绘制应用程序。
相反,只要checkbox的状态发生变化,就应该执行类似于this answer的操作,并确保对要渲染的面板执行Invalidate()操作。
发布于 2014-04-08 19:01:56
您应该编写radioButton_CheckedChanged代码,而不是使用Form_Load事件。所以,如果你能正确处理一些if语句,你就可以在这个事件被触发时画出矩形、正方形等等。例如:
private void radioButton1_CheckedChanged(sender, e) {
if(radioButton1.Checked) {
pnForm.Invalidate(); // or pnForm.Refresh();
//Draw shape1
}
}
private void radioButton2_CheckedChanged(sender, e) {
if(radioButton2.Checked) {
pnForm.Invalidate(); // or pnForm.Refresh();
//Draw shape2
}
}诸若此类。希望这能有所帮助。
https://stackoverflow.com/questions/22929939
复制相似问题