vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 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 - Ein- und Umsteiger
Re: .... wegen Clonen 
Autor: Bismosa
Datum: 10.01.14 11:54

Zitat:


Ist aber so oder so rel. aufwändig, also auf jeden Fall muss man "manuell" alle Properties durchlaufen - zumindest die Referenz-Typen.

Ich finde es für mein doch recht beschränktes Wissen über die Programmierung wirklich zu aufwendig.
Der Link auf das Video würde mich trotzdem mal interessieren. Ich versuche ja auch dazuzulernen

Ich habe jetzt doch noch einmal weitere Versuche mit meiner "Grundidee" gemacht und etwas funktionierendes hinbekommen:
- Beim Aufrufen der Form Einstellungen werden die Einstellungen aus der Hauptform geclont.
- Es werden nur die Werte in den geclonten Einstellungen angepasst.
- Werden die neuen Einstellungen gespeichert/bestätigt wird mit der Sub CopyValues alle Werte einzeln in das Einstellungsobjekt der Hauptform kopiert. Dabei werden auch die Notifys automatisch ausgelöst und die datenbindung bleibt erhalten.

Klasse Einstellungen (Laden und Speichern gekürzt):
Public Class demo
    Public Property var1 As String = "var1"
    Public Property var2 As Boolean = True
End Class
 
 
<Serializable()> _
Public Class clsEinstellungen
    Implements System.ComponentModel.INotifyPropertyChanged
    Implements ICloneable
 
    Private _Test1 As String = "Test1"
    Property Test1 As String
        Get
            Return _Test1
        End Get
        Set(value As String)
            _Test1 = value
            NotifyPropertyChanged("Test1")
        End Set
    End Property
 
    Private _Test2 As String = "Test2"
    Property Test2 As String
        Get
            Return _Test2
        End Get
        Set(value As String)
            _Test2 = value
            NotifyPropertyChanged("Test2")
        End Set
    End Property
 
    Private _MyInteger As Integer = 12345
    Property MyInteger As Integer
        Get
            Return _MyInteger
        End Get
        Set(value As Integer)
            _MyInteger = value
            NotifyPropertyChanged("MyInteger")
        End Set
    End Property
 
    Private _MyBoolean As Boolean = False
    Property MyBoolean As Boolean
        Get
            Return _MyBoolean
        End Get
        Set(value As Boolean)
            _MyBoolean = value
            NotifyPropertyChanged("MyBoolean")
        End Set
    End Property
 
    Private _MyDemo As New List(Of demo)
    Property MyDemo As List(Of demo)
        Get
            Return _MyDemo
        End Get
        Set(value As List(Of demo))
            _MyDemo = value
            NotifyPropertyChanged("MyDemo")
        End Set
    End Property
 
    Public Sub CopyValues(ByVal S As clsEinstellungen, ByVal Z As _
      clsEinstellungen)
 
        For Each Zpi As System.Reflection.PropertyInfo In _
          Z.GetType.GetProperties
            Dim Spi As System.Reflection.PropertyInfo = S.GetType.GetProperty( _
            Zpi.Name)
            Dim value = Spi.GetValue(S, Nothing)
            Debug.WriteLine(S.GetType.GetProperty(Zpi.Name).ToString & " wird" & _
              "von " & Zpi.GetValue(Z, Nothing).ToString & " in " & _
              value.ToString & " geändert.")
            Zpi.SetValue(Z, value, Nothing)
        Next
 
    End Sub
 
    Public Function Clone() As Object Implements System.ICloneable.Clone
        Return MemberwiseClone()
    End Function
Form Einstellungen:
Public Class FrmEinstellungen
 
    Private MyEinstellungen As New clsEinstellungen
 
    Private Sub FrmEinstellungen_Load(sender As System.Object, e As _
      System.EventArgs) Handles MyBase.Load
        MyEinstellungen = Form1.Einstellungen.Clone
        TextBox1.DataBindings.Add(New Binding("Text", MyEinstellungen, "Test1", _
          True, DataSourceUpdateMode.OnPropertyChanged))
        TextBox2.DataBindings.Add(New Binding("Text", MyEinstellungen, "Test2", _
        True, DataSourceUpdateMode.OnPropertyChanged))
        txtbxInteger.DataBindings.Add(New Binding("Text", MyEinstellungen, _
        "MyInteger", True, DataSourceUpdateMode.OnPropertyChanged))
        TxtbxLong.DataBindings.Add(New Binding("Text", MyEinstellungen, _
        "MyLong", True, DataSourceUpdateMode.OnPropertyChanged))
        chkbx.DataBindings.Add(New Binding("Checked", MyEinstellungen, _
        "MyBoolean", True, DataSourceUpdateMode.OnPropertyChanged))
 
    End Sub
 
    Private Sub BtnAbbrechen_Click(sender As System.Object, e As _
      System.EventArgs) Handles BtnAbbrechen.Click
        Me.Close()
    End Sub
 
    Private Sub BtnSpeichern_Click(sender As System.Object, e As _
      System.EventArgs) Handles BtnSpeichern.Click
        Form1.Einstellungen.CopyValues(MyEinstellungen, Form1.Einstellungen)
        Me.Close()
    End Sub
End Class
Natürlich ist das so ohne Fehlerbehandlung. Auch fehlt z.B. das Prüfen, ob die Property neu gesetzt werden muss (Werte gleich)

Was haltet ihr davon? Oder ist das so fern von der Realität, das ich das nicht machen sollte?

Gruß
Bismosa
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Eigene Klasse für Einstellungen - Fragen zu DataBindings2.543Bismosa09.01.14 10:21
Re: Eigene Klasse für Einstellungen - Fragen zu DataBindings1.551Manfred X09.01.14 11:03
Re: Eigene Klasse für Einstellungen - Fragen zu DataBindings1.570Bismosa09.01.14 11:30
Re: Eigene Klasse für Einstellungen - Fragen zu DataBindings1.621Manfred X09.01.14 11:35
.... wegen Clonen1.587Manfred X09.01.14 12:15
Re: .... wegen Clonen1.690Bismosa09.01.14 16:08
Re: .... wegen Clonen1.548Manfred X09.01.14 16:26
Re: .... wegen Clonen1.570Bismosa10.01.14 09:25
Re: .... wegen Clonen1.585ErfinderDesRades10.01.14 09:46
Re: .... wegen Clonen1.657Bismosa10.01.14 11:54
Re: .... wegen Clonen1.539Manfred X10.01.14 15:02
Re: .... wegen Clonen1.522Bismosa17.01.14 10:18
Re: .... wegen Clonen1.558ErfinderDesRades17.01.14 10:53
Re: .... wegen Clonen1.563Bismosa17.01.14 12:08
Verschlüsselung1.503Manfred X17.01.14 12:38
Re: Verschlüsselung1.585Bismosa17.01.14 12:49
Re: Eigene Klasse für Einstellungen - Fragen zu DataBindings1.621ErfinderDesRades09.01.14 13:07
Re: Eigene Klasse für Einstellungen - Fragen zu DataBindings1.771Manfred X09.01.14 15:18
Re: Eigene Klasse für Einstellungen - Fragen zu DataBindings1.525ErfinderDesRades09.01.14 16:54
Re: Eigene Klasse für Einstellungen - Fragen zu DataBindings1.553Manfred X09.01.14 17:00
Re: Eigene Klasse für Einstellungen - Fragen zu DataBindings1.589ModeratorDaveS09.01.14 17:58

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