Hallo!
Du mußt eine bindungsfähige Datenklasse bauen oder eine vorhandene
Klasse nutzen, die Eigenschaften für alle Einstellungen der Controls enthält.
Die Controls-Eigenschaften werden jeweils an diese Properties gebunden.
Man könnte dafür z.B. eine Datatable nutzen und ein Einstellungsset jeweils
in einer Datenzeile speichern.
Public Class frmDemo
'Speicher für Controls-Eigenschaften
Dim dtset As New DataTable 'Settings
Dim bsSet As New BindingSource
'Das Control mit gebundenen Eigenschaften
Dim WithEvents tbo As New TextBox With {.Parent = Me, .ReadOnly = True}
'Buttons für Änderung von Eigenschaften
Dim WithEvents ChangeWidth As New Button _
With {.Parent = Me, .Text = "Change Width", .Top = 100, .Width _
= 200}
Dim WithEvents ChangeBackcolor As New Button With _
{.Parent = Me, .Text = "Change Backcolor", .Top = 150, .Width = _
200}
Dim WithEvents ChangeText As New Button _
With {.Parent = Me, .Text = "Change Text", .Top = 200, .Width = _
200}
'Rückgängig machen
Dim WithEvents btnUndo As New Button With _
{.Parent = Me, .Text = "Undo", .Top = 250, .Width = 100}
Dim WithEvents btnRedo As New Button With _
{.Parent = Me, .Text = "Redo", .Top = 250, .Width = 100, .Left = _
150}
Private Sub Load(sender As Object, e As System.EventArgs) Handles Me.Load
With dtset.Columns
.Add("Text", GetType(String))
.Add("Width", GetType(Integer))
.Add("Backcolor", GetType(Color))
End With
'Intialisierung Control-Eigenschaften
dtset.Rows.Add("Hallo Leute", 300, Color.White)
bsSet.DataSource = dtset
'Datenbindungen
With tbo.DataBindings
.Add("Text", bsSet, "Text", False, _
DataSourceUpdateMode.OnPropertyChanged)
.Add("Width", bsSet, "Width", False, _
DataSourceUpdateMode.OnPropertyChanged)
.Add("BackColor", bsSet, "Backcolor", False, _
DataSourceUpdateMode.OnPropertyChanged)
End With
End Sub
Private Function SaveSettings() As DataRow
'aktuelle Einstellungen besorgen
Dim r_old As DataRow = DirectCast(bsSet(bsSet.Position), _
DataRowView).Row
'Zeile für neue Einstellungen einrichten
Dim r_neu As DataRow = DirectCast(bsSet.AddNew, DataRowView).Row
For i As Integer = 0 To dtset.Columns.Count - 1
'alte Einstellungen übertragen
r_neu.Item(i) = r_old.Item(i)
Next i
'Zeiger auf neue Zeile setzen
bsSet.Position = bsSet.Count - 1
'Zeile für neue Einstellungen zurückgeben
Return r_neu
End Function
Private Sub ChangeWidth_Click(sender As Object, e As System.EventArgs) _
Handles ChangeWidth.Click
Dim r_neu As DataRow = SaveSettings()
Dim w As Integer = DirectCast(r_neu("width"), Integer)
Select w
Case Is = 100
w = 200
Case Is = 200
w = 300
Case Else
w = 100
End Select
r_neu("width") = w
bsSet.ResetBindings(False)
End Sub
Private Sub ChangeBackcolor_Click(sender As Object, e As System.EventArgs) _
Handles ChangeBackcolor.Click
Dim r_neu As DataRow = SaveSettings()
Select Case DirectCast(r_neu("BackColor"), Color)
Case Is = Color.White
r_neu("BackColor") = Color.Yellow
Case Is = Color.Yellow
r_neu("Backcolor") = Color.LightGray
Case Else
r_neu("Backcolor") = Color.White
End Select
bsSet.ResetBindings(False)
End Sub
Private Sub ChangeText_Click(sender As Object, e As System.EventArgs) _
Handles ChangeText.Click
Dim r As DataRow = SaveSettings()
r("text") = InputBox("Neuer Text ...", "Textänderung", r( _
"Text").ToString)
bsSet.ResetBindings(False)
End Sub
Private Sub btnUndo_Click(sender As Object, e As System.EventArgs) Handles _
btnUndo.Click
If bsSet.Position > 0 Then
bsSet.Position -= 1
bsSet.ResetBindings(False)
End If
End Sub
Private Sub btnRedo_Click(sender As Object, e As System.EventArgs) Handles _
btnRedo.Click
If bsSet.Position < bsSet.Count - 1 Then
bsSet.Position += 1
bsSet.ResetBindings(False)
End If
End Sub
End Class |