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);
}
}
我设置了radiobuttons以在形状之间进行选择,但是当我检查方块时,面板中没有任何内容。我尝试了各种参数,如pnForm.ClientRectangle.Width / Height,其他数值等,但没有对我有用。
PS。它不是" pnForm.Backcolor = Color.White",我在没有此代码的情况下对其进行了测试,但它也无法正常工作。
编辑:我删除了if子句,现在它正在运行。当我发现错误时,让你知道。
答案 0 :(得分:0)
从方法名称判断,您的代码仅在表单加载时调用一次。 Windows Forms / GDI是一种无状态绘图架构。如果复选框的值发生变化,它不知道它应该重新绘制应用程序。
而是执行this answer之类的操作,并确保只要您的复选框状态发生变化,Invalidate()
您正在渲染的面板。
答案 1 :(得分:0)
您应该对Form_Load
进行编码,而不是使用radioButton_CheckedChanged
事件。因此,如果您可以处理一些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
}
}
等等。 希望这会有所帮助。