Vb.net 如何使用自定义扩展名保存表单的内容(不是文本或图像)并打开保存的自定义文件

Vb.net 如何使用自定义扩展名保存表单的内容(不是文本或图像)并打开保存的自定义文件,vb.net,winforms,openfiledialog,savefiledialog,Vb.net,Winforms,Openfiledialog,Savefiledialog,我的实习项目需要一些帮助 在VB项目中,我有一个windows窗体(Form1.VB),其中有一个名为WaveForm1的自定义用户控件(其作用类似于示波器的图形)。我可以运行VB程序并为通道赋值,以便在项目运行时在WaveForm1用户控件中获得波形 然后,我需要使用SaveFileDialog将波形m1与图形中绘制的通道一起保存在自定义文件扩展名(.gph、.wfm、…)下 当使用OpenFileDialog通过按钮(btnOpen)打开保存的文件时,它应该能够在vb项目中打开 只要可以查看

我的实习项目需要一些帮助

在VB项目中,我有一个windows窗体(Form1.VB),其中有一个名为WaveForm1的自定义用户控件(其作用类似于示波器的图形)。我可以运行VB程序并为通道赋值,以便在项目运行时在WaveForm1用户控件中获得波形

然后,我需要使用SaveFileDialog将波形m1与图形中绘制的通道一起保存在自定义文件扩展名(.gph、.wfm、…)下

当使用OpenFileDialog通过按钮(btnOpen)打开保存的文件时,它应该能够在vb项目中打开

只要可以查看保存的图形,文件在项目中如何打开并不重要。(例如,保存的文件可以在Form1.vb中的另一个WaveForm2控件中查看,也可以在单独的窗口窗体中查看。)如果可以使用btnOpen按钮控件从项目中保存并再次打开整个形成的文件也可以

我搜索了有关自定义文件创建和保存文件的信息,所能找到的只是如何使用StreamWriter/Reader、binaryReader/Writer等来保存文本文件、excel文件或图像

我非常感谢任何关于保存文本文件或图形以外的内容的帮助


如果您不清楚我的问题,请随时与我确认。

您应该尝试创建一个具有某些属性的类,然后可以使用
BinarryFormatter
保存该类。您可以为该类提供自定义扩展,并通过
SaveFileDialog
保存它,然后通过
OpenFileDialog
打开它

课程

<Serializable()>
Public Class myGraph
    Private _value1 As String
    Public Property Value1 As String
        Get
            Return _value1
        End Get
        Set(value As String)
            _value1 = value
        End Set
    End Property

    Private _value2 As String
    Public Property Value2 As String
        Get
            Return _value2
        End Get
        Set(value As String)
            _value2 = value
        End Set
    End Property

    Private _value3 As String
    Public Property Value3 As String
        Get
            Return _value3
        End Get
        Set(value As String)
            _value3 = value
        End Set
    End Property
End Class
如何使用文件

''To Save file
Public Sub SaveFile(GRAPH_1 As myGraph)
    ''To Save File
    Dim dlgSave As New SaveFileDialog
    dlgSave.Filter = "My File|*.grp"
    dlgSave.DefaultExt = ".gpr"
    If dlgSave.ShowDialog = Windows.Forms.DialogResult.OK Then
        Dim formatter As New BinaryFormatter
        Using stream As New MemoryStream
            formatter.Serialize(stream, GRAPH_1)
            Using sw As New FileStream(dlgSave.FileName, FileMode.Create)
                Dim data() As Byte = stream.ToArray()
                sw.Write(data, 0, data.Length)
            End Using
        End Using
    End If
End Sub

''To Load fie
Public Function LoadFile() As myGraph
    Dim GRAPH_2 As myGraph = Nothing
    Dim dlgOpen As New OpenFileDialog
    dlgOpen.Filter = "My File|*.grp"
    If dlgOpen.ShowDialog = Windows.Forms.DialogResult.OK Then
        Dim formatter As New BinaryFormatter
        Using stream As New FileStream(dlgOpen.FileName, FileMode.Open)
            GRAPH_2 = TryCast(formatter.Deserialize(stream), myGraph)
        End Using
    End If
    Return GRAPH_2
End Function
''To Save File
Dim GRAPH_1 As New myGraph
With GRAPH_1
    .Value1 = "ABC"
    .Value2 = "XYZ"
    .Value3 = "PQR"
End With

SaveFile(GRAPH_1)


''ToLoad File
Dim GRAPH_2 As myGraph = LoadFile()
If GRAPH_2 IsNot Nothing Then
    ''Place your code here
    ''And assign values to your graph from that (myGraph)class.
End If

图形数据以什么形式存在(不是windows窗体,而是数据类型、结构)?您留下的选项是使用您自己的扩展并将其与应用程序关联。然后,在获取文件时,您必须处理该文件,解析数据,并将其放到需要的位置……我不完全理解您的意思,但用户控件是在C#中创建的,使用图形和图纸获取网格,用于通道位置的坐标保存为浮动。当它用于窗口形式的应用程序时,它的功能就像示波器屏幕一样。我需要将绘制的波形保存为自定义文件,以便在必要时从VB应用程序中检索@PuroponixOK,如果“绘制的波形”是一系列
,您可以编写一个类来保存集合或
列表(点)
,并序列化它,可能还有一些总体比例信息。您必须为它编写一个类型转换器,然后将其序列化。如果要将其保存为特定的定义格式,则必须做一些准备工作。@MrCoDeXeR您好,我在保存项目中使用的自定义用户控件的属性时遇到问题。我可以知道关联扩展将如何帮助保存用户控件的自定义属性吗?(示例:GraphArea[System.Drawing.Rectangle]、GraphAreaColor[System.Drawing.Color]、GraphState[Graphics]、…)谢谢您的回答:我正在尝试,但我仍然不知道它是否会工作,因为波形用户控件有几个公共属性。(例如:GraphArea[System.Drawing.Rectangle]、GraphAreaColor[System.Drawing.Color]、GraphState[Graphics]、…)它们都是在项目中为用户控制而创建的。我是否也需要将它们添加到我的项目中的类中?我如何将上述程序与WaveForm1用户控件联系起来,以便保存其条件@Wulworine不应在该类中添加控件。只存储它们的值。因为如果任何控件未标记为可序列化,则无法序列化。您应该创建一些属性来存储该控件的值,当您加载该文件时,您需要将值从加载的类对象分配回该控件。
Public class myGraph Private\u value1作为颜色公共属性值1作为颜色获取返回\u value1结束获取设置(值作为颜色)_value1=value End Set End Property End Class
这是我在类中使用的示例代码,然后我使用了相同的SaveFile()子文件,并在按钮下添加以下代码,单击
Dim_waveorm1作为带有_waveorm1的新myGraph。value1=waveorm1.GraphAreaColor End With SaveFile(_waveorm1)End Sub
它不保存任何内容。(创建的文件大小为0字节)您有什么建议吗?多谢各位@WulworineI已经修改了
SaveFile
LoadFile
的代码。现在,它已测试并处于工作状态。:)