【问题标题】:Display several LineSeries using Oxyplot in Windows forms app在 Windows 窗体应用程序中使用 Oxyplot 显示多个 LineSeries
【发布时间】:2019-09-16 18:24:13
【问题描述】:

我正在构建一个显示 2D 曲线的应用程序,例如 Math.Sin 曲线。提示用户输入他想在图上显示多少个点。当他选择点数并为它们输入参数时 - 将打开一个显示绘图的新窗口。

我的问题是,如果有办法,我可以回到上一个窗口并输入新参数,这将生成一条新曲线但与第一个曲线一起显示?我现在的解决方案是只显示一条曲线。任何时候打开绘图窗口 - 都会创建它的一个新实例,所以我想我必须找到一种方法来使用相同的实例,因为窗口没有关闭,只是隐藏,但我不知道如何。

查看以下图片:

【问题讨论】:

    标签: c# winforms plot oxyplot


    【解决方案1】:

    正如您已经假设的那样,您可以从使用显示 PlotView 的同一 Form 实例开始。您可以在PlotDisplayWindow 表单中公开方法Update,然后使用新点更新绘图视图。例如,在您的父表单中。

    PlotDisplayWindow plotDisplay;
    
    private void RefreshPlot(object sender, EventArgs e)
    {
        var dataPoints = GetNewDataPoints();
        if (plotDisplay == null)
        {
            plotDisplay = new PlotDisplayWindow();
            plotDisplay.Show();
        }
        plotDisplay.Update(dataPoints);
    }
    

    在您的PlotDisplayWindow 表单中,您可以在第一次加载窗口时初始化您的模型,然后使用更新方法向绘图视图添加更多点。例如:

    private void PlotDisplayWindow_Load(object sender, EventArgs e)
    {
        this.plotView1.Model = new PlotModel { Title = "Example 1" };
    }
    
    public void Update(IEnumerable<DataPoint> points)
    {
        this.plotView1.Model.Series.Add(new LineSeries { ItemsSource = points });
        this.plotView1.InvalidatePlot(true);
    }
    

    PlotView.InvalidatePlot(true) 将确保刷新绘图并显示新添加的点。

    【讨论】:

    • 感谢您的回复。不幸的是,这无济于事。我得到“对象引用未设置为对象的实例”异常,当我尝试在没有实例的 PlotDisplayWindow 字段上调用 ​​Update() 方法时抛出该异常。我不太确定为什么它没有实例,因为 PlotDisplay 表单没有关闭..
    • @RichardBashev 如果您有如示例中所示的空检查,则如果 PlotDisplayWindow 为空,则将创建一个新实例。您能否调试并检查条件检查是否已执行?
    • 是的,但我不想创建新实例。我想使用当前的。问题是,如果我用绘图隐藏表单并打开我输入参数的表单 - 绘图表单实例将关闭,如果我不创建新实例,我将无法再使用它。我想使用旧的实例情节即使我隐藏了表格..
    • @RichardBashev 如果您可以在处理表单实例的位置共享当前代码,那将会很有帮助。您可以编辑问题以添加代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 2011-05-19
    相关资源
    最近更新 更多