在面板中绘制形状

时间:2014-04-08 07:07:58

标签: c# winforms

希望你能帮助我。我必须在椭圆,圆形,方形等面板中绘制一些形状。这是我的代码:

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子句,现在它正在运行。当我发现错误时,让你知道。

2 个答案:

答案 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
  }
}

等等。 希望这会有所帮助。