【问题标题】:Nullreferenceexception when adding point to chart [duplicate]向图表添加点时出现 Nullreferenceexception [重复]
【发布时间】:2014-02-21 20:45:12
【问题描述】:

创建图表:

    private Chart mainChart;
    private void createChart()
    {
        mainChart = new Chart
        {
            Dock = DockStyle.Fill,
            Name = "chart1",
        };
        mainChart.ChartAreas.Add(new ChartArea());
        mainChart.Legends.Add(new Legend());

        mainChart.ChartAreas[0].AxisX.Minimum = 1;
        for (int i = 0; i < 32; i++)
        {
            mainChart.Series.Add(new Series
            {
                Name = "test" + i,
                LegendText = "Test " + (i + 1).ToString().PadLeft(2, '0'),
                ChartType = SeriesChartType.FastLine,
            });
        }
    }

图表属性:

public Chart chart
{
    get
    {
        return mainChart;
    }
    set
    {
        mainChart = value;
        Form activeChild = FormAlreadyLoaded("Child_Chart");
        if (activeChild != null)
        {
            Chart frmchart = activeChild.Controls.Find("chart1", true).FirstOrDefault() as Chart;
            frmchart = mainChart;
        }
    }
}

FormAlreadyLoaded 方法:

private Form FormAlreadyLoaded(string formName)
{
    foreach (Form frm in this.MdiChildren)
        if (frm.Name.Equals(formName))
            return frm;
    return null;
}

Child_Chart 在“Load”方法中是一个简单的表格:

MainForm parent = this.MdiParent as MainForm;
this.Controls.Add(parent.chart);

添加到图表(发生错误的地方)

chart.Series[i].Points.AddXY(value1,value2);

异常文本:

    System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Windows.Forms.DataVisualization.Charting.Chart.get_Series()
   at Oasis.MainForm.<>c__DisplayClass13.<ProcessSerial>b__11() in MainForm.cs:line 355
   at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
   at System.Windows.Forms.Control.InvokeMarshaledCallbacks()

更多信息:

createChart() 是在主窗体的加载事件中调用的第一件事。

导致错误的代码行在a里面

this.BeginInvoke(new MethodInvoker(delegate()

在串行端口的 DataRecieved 事件中

出现错误后'mainChart'的局部值 i.imgur.com/LZSY3Iw.png

所有这些代码都可以正常工作,直到我关闭“Child_Chart”。

【问题讨论】:

    标签: c# winforms graph nullreferenceexception


    【解决方案1】:

    由于 series[i] 的 Points 属性可能是一个非原始类型,你需要使用它的构造函数使用 'new' 关键字对其进行初始化

    【讨论】:

    • 我在主帖中添加了更多信息。
    【解决方案2】:

    你确定chart 不是 null 吗?我没有看到 CreateChart() 被调用的位置,也没有看到私有字段 mainChart 被实例化的其他任何地方。

    除此之外,您需要中断错误并查看哪个是空引用。在整个语句中可能是chartchart.Serieschart.Series[i],等等。

    【讨论】:

    • 我在主帖中添加了更多信息。
    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 2013-01-21
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2021-01-28
    • 2018-04-05
    相关资源
    最近更新 更多