首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在面板中绘制形状

在面板中绘制形状
EN

Stack Overflow用户
提问于 2014-04-08 15:07:58
回答 2查看 111关注 0票数 1

希望你能帮助我。我必须画一些形状到一个面板,如椭圆,圆形,正方形等。这是我的代码:

代码语言:javascript
复制
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子句,现在它可以工作了。当我发现我的错误时,让你知道。

EN

回答 2

Stack Overflow用户

发布于 2014-04-08 15:15:16

从方法的名称判断,您的代码只在表单加载时被调用一次。Windows Forms/GDI是一种无状态绘图体系结构。它不知道如果checkbox的值发生变化,它是否应该重新绘制应用程序。

相反,只要checkbox的状态发生变化,就应该执行类似于this answer的操作,并确保对要渲染的面板执行Invalidate()操作。

票数 0
EN

Stack Overflow用户

发布于 2014-04-08 19:01:56

您应该编写radioButton_CheckedChanged代码,而不是使用Form_Load事件。所以,如果你能正确处理一些if语句,你就可以在这个事件被触发时画出矩形、正方形等等。例如:

代码语言:javascript
复制
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
  }
}

诸若此类。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22929939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档