Vb.net 如何将图表控制代码从Winform移动到dll,同时将图表对象保留在Winform中?

Vb.net 如何将图表控制代码从Winform移动到dll,同时将图表对象保留在Winform中?,vb.net,winforms,class,Vb.net,Winforms,Class,我开发了一个Winform应用程序,其中包括许多图表。我需要与客户共享我的VB项目,这样他就可以做一些小的更改,但我想对我的图表代码保密。我的想法是将所有图表对象保存在Winform中,但负责操作图表并将数据填充到引用的dll文件中的代码。我不确定这是否可能。我到目前为止所做的事情如下 我用Winform(Form1)在同一个项目的一个类(Class1)中分离了图表代码。当您按下表单上的按钮时,将在Winform类中执行MySQL查询,并填充Datatable(选项卡),然后将其传递到类(Dis

我开发了一个Winform应用程序,其中包括许多图表。我需要与客户共享我的VB项目,这样他就可以做一些小的更改,但我想对我的图表代码保密。我的想法是将所有图表对象保存在Winform中,但负责操作图表并将数据填充到引用的dll文件中的代码。我不确定这是否可能。我到目前为止所做的事情如下

  • 我用Winform(Form1)在同一个项目的一个类(Class1)中分离了图表代码。当您按下表单上的按钮时,将在Winform类中执行MySQL查询,并填充Datatable(选项卡),然后将其传递到类(DisplayCharts)中的过程,其中是图表代码。所有工作正常,图表中填充了数据。请参见下面的一些声明代码。图表对象“修改器”字段设置为公共
  • Winform类标题和数据表声明:

    Public Class Form1
        Public Shared Tab As New DataTable
    
    1级标题、程序和部分图表代码:

    Public Class Class1
    
        Public Shared Sub DisplayCharts(tab As DataTable)
    
            Form1.Chart1.DataSource = tab
    
            Form1.Chart1.Legends.Add("Legends 1")
            Form1.Chart1.ChartAreas.Add("ChartArea1")
            Form1.Chart1.Series.Add("Series 1")
    
    在Winform类中调用过程:

    Class1.DisplayCharts(Tab)
    
  • 当我在论坛中阅读获取DLL时,我需要从类型“Class Library”创建一个新的VB项目,然后在删除VS创建的默认新类后复制Form1和Class1。在复制之前,我添加了Winform所需的缺少的引用和命名空间。但在从Class1中引用Winform中的Chart1时,我无法消除错误“引用非共享成员需要对象引用”:

  • 我做的其他事情是创建一个新的“Windows窗体控件库”,在那里复制Form1和Class1。我对引用和名称空间没有任何问题,也没有任何其他错误。项目已编译,dll已成功生成。我将dll(WindowsControlLibrary1.dll)移动到只包含Form1的Winform项目中,并引用了该dll。我调用的过程如下所示:

  • 但什么也没发生,图表仍然是空的。当我在类中放置一个MsgBox作为测试时,会显示消息,因此调用了过程,但dll中的类与Winform chart没有交互


    显然,我做错了什么,只要我的问题有解决办法,任何帮助都会得到感谢。谢谢大家!

    将图表引用传递到库。我如何才能做到这一点?您不是将
    选项卡作为DataTable传递吗?然后您可以将图表作为图表传递
    Chart
    这些曲线试图通知您什么?您必须传递现有的图表对象,即
    Chart1
    。这是你用来绘制图表的参考。你不能建造一个新的。哦,是的,你完全正确。非常感谢。我所做的就是跟随。上面的点1-Class1中的过程用图表参数声明为
    公共共享子显示图表(选项卡为DataTable,图表1为chart)
    。在此之前,您需要在命名空间System.Windows.Forms.DataVisualization.Charting.Chart之后添加项目,然后使用
    Class1.DisplayCharts(选项卡,Chart1)
    调用此过程。然后保存项目并移动到第2点以创建DLL。将第1点中的项目复制到新位置后,删除现有的Class1,引用DLL,瞧:)
    WindowsControlLibrary1.Class1.DisplayCharts(Tab)