Я создаю «форму предпочтения», которая будет содержать все предпочтения пользователей и когда они перейдут на «Применить/Сохранить». Я хочу, чтобы новые значения возвращались к основной форме и обновлялись и закрывали форму2. В прошлом я сделал это так:Передача данных между формами DIRECTLY
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
И когда при нажатии «Применить/Сохранить» он будет принимать все значения из Form2 и хранить их в частной переменной (или собственности) в Form2 и когда форма закрывается, я бы тогда получить доступ к значению, как это:
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
Если у вас есть много пользовательских параметров, вы можете захотеть иметь класс, отвечающий за загрузку, сохранение, отображение и редактирование. Тогда любой актер, которому нужно знать 'SaveFolder' или что-то еще, может извлечь его из этого класса. Как только вы обнаружите ООП, передача данных между формами очень редко происходит. Кроме того, вы в конце концов ударите кирпичную стену, используя экземпляры формы по умолчанию. – Plutonix
Сделайте другой класс вне form1 и form2? – goomba454
Yup. Каждый пользовательский параметр может быть свойством (или в некоторых случаях), чтобы другие участники могли загружать все, что им нужно, без загрузки какой-либо формы; формы - это то, как приложения/код взаимодействуют с пользователями. Для тривиального числа параметров вы можете просто использовать встроенный 'Настройки' – Plutonix