vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Undo/Redo für Controls 
Autor: Manfred X
Datum: 01.04.15 19:36

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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Undo/Redo für Controls1.396henrikl200001.04.15 15:00
Re: Undo/Redo für Controls1.013Manfred X01.04.15 19:36
Re: Undo/Redo für Controls973henrikl200001.04.15 21:06
Re: Undo/Redo für Controls1.142Manfred X01.04.15 21:29
Re: Undo/Redo für Controls955henrikl200002.04.15 11:11

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel