Vb.net 如何使用自定义扩展名保存表单的内容(不是文本或图像)并打开保存的自定义文件
我的实习项目需要一些帮助 在VB项目中,我有一个windows窗体(Form1.VB),其中有一个名为WaveForm1的自定义用户控件(其作用类似于示波器的图形)。我可以运行VB程序并为通道赋值,以便在项目运行时在WaveForm1用户控件中获得波形 然后,我需要使用SaveFileDialog将波形m1与图形中绘制的通道一起保存在自定义文件扩展名(.gph、.wfm、…)下 当使用OpenFileDialog通过按钮(btnOpen)打开保存的文件时,它应该能够在vb项目中打开 只要可以查看保存的图形,文件在项目中如何打开并不重要。(例如,保存的文件可以在Form1.vb中的另一个WaveForm2控件中查看,也可以在单独的窗口窗体中查看。)如果可以使用btnOpen按钮控件从项目中保存并再次打开整个形成的文件也可以 我搜索了有关自定义文件创建和保存文件的信息,所能找到的只是如何使用StreamWriter/Reader、binaryReader/Writer等来保存文本文件、excel文件或图像 我非常感谢任何关于保存文本文件或图形以外的内容的帮助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项目中打开 只要可以查看
如果您不清楚我的问题,请随时与我确认。您应该尝试创建一个具有某些属性的类,然后可以使用
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
的代码。现在,它已测试并处于工作状态。:)