【问题标题】:Graphics failure in panel面板中的图形故障
【发布时间】:2012-05-23 15:00:48
【问题描述】:

我正在尝试在表单上的面板上绘制基本形状。到目前为止什么也没发生,我不知道为什么。这个方法在我的表单的构造函数中被调用。

private void doGraphics()
    {
        Pen p = new Pen(Color.Black);//draws wire frame Shapes
        SolidBrush sb = new SolidBrush(Color.Yellow);//draws filled Shapes
        Graphics g = panel1.CreateGraphics();


        Point[] pointArray = { new Point(100, 20), new Point(100, 0), new Point(120, 0), new Point(120, 20) };
        g.FillPolygon(sb, pointArray);
        g.DrawPolygon(p, pointArray);
    }

任何建议都会很棒!

【问题讨论】:

标签: c# visual-studio-2010 graphics panel


【解决方案1】:

需要注册到面板的Paint事件,并使用参数自带的图形对象:

在构造函数中:

panel1.Paint += new PaintEventHandler(panel1_Paint);

处理程序本身:

void panel1_Paint(object sender, PaintEventArgs e) {
{
        Pen p = new Pen(Color.Black);//draws wire frame Shapes
        SolidBrush sb = new SolidBrush(Color.Yellow);//draws filled Shapes
        Graphics g = e.Graphics; // From Arguments


        Point[] pointArray = { new Point(100, 20), new Point(100, 0), new Point(120, 0), new Point(120, 20) };
        g.FillPolygon(sb, pointArray);
        g.DrawPolygon(p, pointArray);
}

【讨论】:

  • 当你想调用它时,请panel1.Refresh()
  • @Kyborek:Invalidate 通常是更好的选择。 Refresh 立即强制重绘。
  • @leppie 随便你。只是防止诸如“它仅在表单加载时绘制,我如何重绘它?”之类的问题
【解决方案2】:

当您在构造函数中调用此方法时,您不能假定子控件和/或图形对象可用。使用表单的 OnPaint 方法或创建自定义控件并覆盖那里的 OnPaint。

【讨论】:

    猜你喜欢
    • 2015-03-21
    • 2015-10-26
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多