You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从其他类调用Panel绘制图形?Panel刷新无显示问题排查

问题分析与修复方案

首先,你当前代码的核心问题出在错误创建Graphics对象上,这也是导致Refresh()无法触发正确重绘的关键原因。

为什么你的Panel总是空白?

在GraphPanel_Paint事件里,你调用了GraphPanel.CreateGraphics()来获取绘图上下文,但这个方法创建的是临时的Graphics对象——它绘制的内容不会被系统的重绘机制保存。当你调用Refresh()时,Panel会触发Paint事件重新绘制,但此时系统会用自己的Graphics上下文(也就是PaintEventArgs里的e.Graphics)来清除旧内容并重绘,而你之前用CreateGraphics()画的内容早就没了,自然就显示空白。

修复步骤

  1. 直接使用PaintEventArgs提供的e.Graphics进行绘制,这是WinForms控件重绘的标准方式,能保证绘制内容在每次重绘时都被正确渲染。
  2. 检查柱状图的坐标计算:WinForms的Y轴是从上到下递增的,如果你设置的矩形高度是正数,柱状图会从Y=520的位置向下画,很可能超出Panel的可视区域,所以需要把高度设为负数(或者调整Y坐标为Panel底部减去柱状图高度),这样才能向上画出正常的柱状图。
  3. 可选优化:把单独的月份变量改成数组,让代码更简洁易维护。

修改后的完整代码

public void GraphPanel_Paint(object sender, PaintEventArgs e) 
{ 
    // 获取各月份数据
    double janGraph = DataSorter.GetJan;
    double febGraph = DataSorter.GetFeb;
    double marGraph = DataSorter.GetMar;
    double aprGraph = DataSorter.GetApr;
    double mayGraph = DataSorter.GetMay;
    double junGraph = DataSorter.GetJun;
    double julGraph = DataSorter.GetJul;
    double augGraph = DataSorter.GetAug;
    double sepGraph = DataSorter.GetSep;
    double octGraph = DataSorter.GetOct;
    double novGraph = DataSorter.GetNov;
    double decGraph = DataSorter.GetDec;

    // 使用using自动释放笔刷资源
    using (SolidBrush graphBrush = new SolidBrush(Color.Blue))
    {
        // 直接使用Paint事件提供的Graphics对象
        Graphics graphPanel = e.Graphics;

        // 绘制一月柱状图:高度用负数,从Y=520向上延伸
        // 参数:笔刷, X坐标, Y坐标, 柱子宽度, 柱子高度
        graphPanel.FillRectangle(graphBrush, 48, 520, 48, -Convert.ToSingle(janGraph));
        // 二月柱子:X坐标偏移(宽度+间隔),这里间隔设为10
        graphPanel.FillRectangle(graphBrush, 48+48+10, 520, 48, -Convert.ToSingle(febGraph));
        // 三月柱子
        graphPanel.FillRectangle(graphBrush, 48+(48+10)*2, 520, 48, -Convert.ToSingle(marGraph));
        // ... 后续月份以此类推,调整X坐标即可
    }
}

额外注意事项

  • 当数据更新后,调用GraphPanel.Refresh()就能触发Paint事件,用最新数据重绘柱状图了。
  • 确保DataSorter返回的数值在Panel的高度范围内(比如如果Panel高度是500,数值不要超过500),否则柱状图会超出可视区域。
  • 建议把柱子宽度、间距、起始坐标这些固定值提取成常量,后续调整布局会更方便。

内容的提问来源于stack exchange,提问作者Dax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:35:47