Vb.net 在表单之间直接传递数据
我正在制作一个“首选项表单”,它将保存所有用户的首选项,当他们开始应用/保存时,我希望新值传输回主表单并更新并关闭表单2。过去我是这样做的:Vb.net 在表单之间直接传递数据,vb.net,Vb.net,我正在制作一个“首选项表单”,它将保存所有用户的首选项,当他们开始应用/保存时,我希望新值传输回主表单并更新并关闭表单2。过去我是这样做的: Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click Preferences.Show() End Sub form1.textbox.text = fo
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Preferences.Show()
End Sub
form1.textbox.text = form2.textbox.text
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Dim dialog As New Preferences
dialog.ShowDialog()
End Sub
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Dim dialog As New Preferences
dialog.ShowDialog()
form1.textbox.text = dialog.variable
End Sub
当我在“应用/保存”按钮关闭前单击该按钮时,我会像这样传输所有数据:
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Preferences.Show()
End Sub
form1.textbox.text = form2.textbox.text
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Dim dialog As New Preferences
dialog.ShowDialog()
End Sub
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Dim dialog As New Preferences
dialog.ShowDialog()
form1.textbox.text = dialog.variable
End Sub
这样做有什么不对吗
我一直在读的是我应该这样做:
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Preferences.Show()
End Sub
form1.textbox.text = form2.textbox.text
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Dim dialog As New Preferences
dialog.ShowDialog()
End Sub
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Dim dialog As New Preferences
dialog.ShowDialog()
form1.textbox.text = dialog.variable
End Sub
当他们单击“应用/保存”时,它将获取Form2中的所有值并将它们存储在Form2中的私有变量(或属性)中,当该表单关闭时,我将访问如下值:
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Preferences.Show()
End Sub
form1.textbox.text = form2.textbox.text
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Dim dialog As New Preferences
dialog.ShowDialog()
End Sub
Private Sub PreferencesToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles PreferencesToolStripMenuItem.Click
Dim dialog As New Preferences
dialog.ShowDialog()
form1.textbox.text = dialog.variable
End Sub
为什么这是一种更好的方法
更新…看看下面的代码,这只是我将拥有的所有选项的一个小示例。序列化时,将数据收集到要使用的对象中的最佳方法是什么
<Serializable>
Public Class Preference
#Region "Properties"
Public Property ScaleLowest As String = "5"
Public Property ScaleHighest As String = "200"
Public Property ScaleInc As String = "5"
Public Property ThickLowest As Double = 0.125
Public Property ThickHighest As Double = 4
Public Property ThickInc As Double = 0.125
Public Property WidthLowest As Double = 0.125
Public Property WidthHighest As Double = 0.6
Public Property WidthInc As Double = 0.125
Public Property LengthLowest As Double = 1
Public Property LengthHighest As Double = 96
Public Property LengthInc As Double = 1
Public Property FractionON As Boolean = False
Public Property DecimalON As Boolean = True
Public Property ColorSelection As String = "Colors"
Public Property FinalColor As String = "255, 255, 0"
Public Property roughColor As String = "255, 255, 100"
Public Property SplashON As Boolean = False
Public Property LogInON As Boolean = False
#End Region
Public Sub New()
'for creating new instance for deserializing
End Sub
Public Sub GatherAllData()
'Save Defaults
SaveSerializeObj()
End Sub
Public Sub SaveSerializeObj()
'Get Changes?????
'Serialize object to a text file.
Dim objStreamWriter As New StreamWriter("C:\Users\Zach454\Desktop\test.xml")
Dim x As New XmlSerializer(Me.GetType)
x.Serialize(objStreamWriter, Me)
objStreamWriter.Close()
End Sub
Public Function LoadSerializeObj() As Preference
'Check if new file need created
If File.Exists("C:\Users\454\Desktop\test.xml") = False Then
SaveSerializeObj()
End If
'Deserialize text file to a new object.
Dim objStreamReader As New StreamReader("C:\Users\454\Desktop\test.xml")
Dim newObj As New Preference
Dim x As New XmlSerializer(newObj.GetType)
newObj = CType(x.Deserialize(objStreamReader), Preference)
objStreamReader.Close()
Return newObj
End Function
公共阶级偏好
#区域“财产”
公共属性ScaleLowest为String=“5”
公共属性ScaleHighest为String=“200”
公共属性ScaleInc为String=“5”
公共财产最低限额为双倍=0.125
公共属性的最大值为Double=4
公共财产的双重价值=0.125
公共财产宽度最低为双=0.125
公共财产的最大宽度为Double=0.6
公共财产宽度(双倍=0.125)
公共财产最短长度为双=1
公共财产长度最高为Double=96
公共属性长度(双精度=1)
公共属性FractionON作为布尔值=False
公共属性DecimalON为布尔值=True
公共属性ColorSelection为String=“Colors”
公共属性FinalColor As String=“255,255,0”
公共属性roughColor为String=“255,255,100”
公共属性SplashON为布尔值=False
公共属性LogInON为Boolean=False
#末端区域
公共分新()
'用于创建用于反序列化的新实例
端接头
公共子集合AllData()
'保存默认值
saveObj()
端接头
公共子对象
'获取更改?????
'将对象序列化为文本文件。
Dim objStreamWriter作为新的StreamWriter(“C:\Users\Zach454\Desktop\test.xml”)
Dim x作为新的XmlSerializer(Me.GetType)
x、 序列化(objStreamWriter,Me)
objStreamWriter.Close()
端接头
公共函数LoadSerializeObj()作为首选项
'检查是否需要创建新文件
如果File.Exists(“C:\Users\454\Desktop\test.xml”)=False,则
saveObj()
如果结束
'将文本文件反序列化为新对象。
Dim objStreamReader作为新的StreamReader(“C:\Users\454\Desktop\test.xml”)
Dim newObj作为新的首选项
Dim x作为新的XmlSerializer(newObj.GetType)
newObj=CType(x.Deserialize(objStreamReader),首选项)
objStreamReader.Close()
返回newObj
端函数
最好的选择是创建一个类,该类将具有表单控件的属性。然后可以存储这些属性,然后在需要时访问这些属性
此外,实际上没有理由来回传递数据,您可以将这些数据存储在某个位置(数据库、文件、mysettings等),然后将这些数据加载到类中。然后可以存储和检索此类中的数据。然后,如果需要将数据保存回某个有类对象可使用的位置
下面是一个简短的示例,演示如何创建另一个表单(首选项),单击“保存”,然后在另一个表单(调用表单)上显示这些值
这是主要形式
Public Class Form1
Public _frm2 As Form2
Private Sub btnShowPreferences_Click(sender As Object, e As EventArgs) Handles btnShowPreferences.Click
Using _frm2 As New Form2()
'if we clicked save on the form then show the values in the
'controls that we want to
If _frm2.ShowDialog() = Windows.Forms.DialogResult.OK Then
txtFirstName.Text = _frm2._Preferences.FirstName
txtLastName.Text = _frm2._Preferences.LastName
End If
End Using
End Sub
End Class
下面是一个示例(首选项)类
此类将保存首选项的所有属性。这是一个例子,你可以改变你需要的任何东西来满足你的需要
Option Strict On
Public Class Preferences
#Region "Properties"
Public Property FirstName As String
Public Property LastName As String
#End Region
Public Sub New()
End Sub
End Class
第二个表单
可以是您的(首选)表单,其中包含用户需要与之交互的所有控件
Public Class Form2
Public _Preferences As New Preferences 'create class variable you can use for later to store data
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
'set your properties of the class from your form. this will then hold everything you can get from
'the first form...
With _Preferences
.FirstName = txtFirstName.Text
.LastName = txtLastName.Text
End With
Me.DialogResult = Windows.Forms.DialogResult.OK 'this is used to determine if user clicked a save button...
End Sub
End Class
我希望这是您开始学习的地方,如果您不了解某些内容,请告诉我。最好的选择是创建一个类,该类将具有表单控件的属性。然后可以存储这些属性,然后在需要时访问这些属性 此外,实际上没有理由来回传递数据,您可以将这些数据存储在某个位置(数据库、文件、mysettings等),然后将这些数据加载到类中。然后可以存储和检索此类中的数据。然后,如果需要将数据保存回某个有类对象可使用的位置 下面是一个简短的示例,演示如何创建另一个表单(首选项),单击“保存”,然后在另一个表单(调用表单)上显示这些值 这是主要形式
Public Class Form1
Public _frm2 As Form2
Private Sub btnShowPreferences_Click(sender As Object, e As EventArgs) Handles btnShowPreferences.Click
Using _frm2 As New Form2()
'if we clicked save on the form then show the values in the
'controls that we want to
If _frm2.ShowDialog() = Windows.Forms.DialogResult.OK Then
txtFirstName.Text = _frm2._Preferences.FirstName
txtLastName.Text = _frm2._Preferences.LastName
End If
End Using
End Sub
End Class
下面是一个示例(首选项)类
此类将保存首选项的所有属性。这是一个例子,你可以改变你需要的任何东西来满足你的需要
Option Strict On
Public Class Preferences
#Region "Properties"
Public Property FirstName As String
Public Property LastName As String
#End Region
Public Sub New()
End Sub
End Class
第二个表单
可以是您的(首选)表单,其中包含用户需要与之交互的所有控件
Public Class Form2
Public _Preferences As New Preferences 'create class variable you can use for later to store data
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
'set your properties of the class from your form. this will then hold everything you can get from
'the first form...
With _Preferences
.FirstName = txtFirstName.Text
.LastName = txtLastName.Text
End With
Me.DialogResult = Windows.Forms.DialogResult.OK 'this is used to determine if user clicked a save button...
End Sub
End Class
我希望这是您的开始,如果您不了解一些内容,请让我知道。为了直接回答您的问题,您的两个代码示例的主要区别在于,第二个示例使用ShowDialog以模式打开表单,而第一个示例允许您在第二个示例打开时与父窗体交互。
从用户流控制的角度来看,第二种方法可能更好。如果您真正的问题是将数据推回到主窗体还是从对话框中提取数据,那么最好从对话框中提取数据。这种方法使对话框可以从其他表单中重用 为了直接回答您的问题,您的两个代码示例的主要区别在于,第二个示例使用ShowDialog以模式打开表单,而第一个示例允许您与父表单交互,而第二个示例是