Hallo,
das musste ich jetzt doch erst einmal versuchen zu verstehen und umzusetzen. Vielen Dank für die ausführliche Hilfe!
Wenn ich das jetzt richtig verstanden habe, dann ändere ich "on the Fly". Also alle Änderungen werden sofort übernommen...können aber dann noch mit Abbrechen verworfen/zurückgesetzt werden. In meinem Fall ist das vielleicht nicht weiter schlimm...aber will ich denn sobald ich Einstellungen mache das immer gleich im Hauptprogramm umgesetzt haben? Eigentlich ja erst, wenn ich die neuen Einstellungen bestätige?
So habe ich das jetzt gemacht:
Einstellungsklasse:
<Serializable()> _
Public Class clsEinstellungen
Implements System.ComponentModel.INotifyPropertyChanged
<Serializable()> _
Private Class Variablen
Implements ICloneable
Public Property Test1 As String = "Test1"
Public Property Test2 As String = "Test2"
Public Function Clone() As Object Implements System.ICloneable.Clone
Return MemberwiseClone()
End Function
End Class
Dim Original As New Variablen
Dim Backup As New Variablen
Property Test1 As String
Get
Return Original.Test1
End Get
Set(value As String)
Original.Test1 = value
NotifyPropertyChanged("Test1")
End Set
End Property
Property Test2 As String
Get
Return Original.Test2
End Get
Set(value As String)
Original.Test2 = value
NotifyPropertyChanged("Test2")
End Set
End Property
Public Sub Reset()
Original = Backup.Clone
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Nothing))
End Sub
Public Sub Commit()
Backup = Original.Clone
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(Nothing))
End Sub
<NonSerialized()> _
Public Event PropertyChanged(ByVal sender As Object, _
ByVal e As System.ComponentModel.PropertyChangedEventArgs) _
Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Private Sub NotifyPropertyChanged(ByVal info As String)
RaiseEvent PropertyChanged(Me, _
New System.ComponentModel.PropertyChangedEventArgs(info))
End Sub
End ClassMain Form:
...
lblInfo1.DataBindings.Add(New Binding("Text", Einstellungen, "Test1", _
True, DataSourceUpdateMode.OnPropertyChanged))
lblInfo2.DataBindings.Add(New Binding("Text", Einstellungen, "Test2", _
True, DataSourceUpdateMode.OnPropertyChanged))
...EinstellungsForm:
Public Class FrmEinstellungen
Private Sub FrmEinstellungen_Load(sender As System.Object, e As _
System.EventArgs) Handles MyBase.Load
TextBox1.DataBindings.Add(New Binding("Text", Form1.Einstellungen, _
"Test1", True, DataSourceUpdateMode.OnPropertyChanged))
TextBox2.DataBindings.Add(New Binding("Text", Form1.Einstellungen, _
"Test2", True, DataSourceUpdateMode.OnPropertyChanged))
End Sub
Private Sub BtnAbbrechen_Click(sender As System.Object, e As _
System.EventArgs) Handles BtnAbbrechen.Click
Form1.Einstellungen.Reset()
Me.Close()
End Sub
Private Sub BtnSpeichern_Click(sender As System.Object, e As _
System.EventArgs) Handles BtnSpeichern.Click
Form1.Einstellungen.Save()
Me.Close()
End Sub
Private Sub FrmEinstellungen_FormClosing(sender As Object, e As _
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Form1.Einstellungen.Reset()
Me.Close()
End Sub
End ClassHier nochmal das ganze Projekt zum testen:
http://drive.google.com/uc?export=download&id=0B--trzUVMN-zcENsZElmTjh0RmM
Danke und Gruß
Bismosa |