none
Änderungen von Elementen in einer Auflistung erfahren RRS feed

  • Frage

  • ·         Hallo,

    Hallo,

    es ist mal wieder soweit, ich muss eine Auflistung erstellen. Es ist jetzt aber so, dass ich erfahren muss, wann sich bspw. Eigenschaften eines Elements ändern.

    Vielleicht ein Beispiel. Ich habe eine Auflistung von Linienelementen die gezeichnet werden sollen. Jetzt muss es durchaus möglich sein, das ich mittels der Auflistung auf ein solches Element zugreife und bzw. den Startpunkt ändere. Die Auflistung bekommt davon nichts mit, es sei denn das Element hat eine Parent-Eigenschaft in der auf die Auflistung verwiesen wird(So habe ich mir bis jetzt beholfen). Leider ist diese Variante sehr unflexibel. Besser wäre es eine generische Auflistung zu erstellen, die alle allgemeinen Anforderung erfüllt. Nehmen wir eine Tabelle. In dieser kann man nur Spalten und Zeilen hinzufügen, löschen etc. , es geht aber nicht eine einzelne Zelle hinzuzufügen oder zu löschen. Ergo erstellt man eine generische Klasse, die einfach ein zweidimensionales Array "darstellt". Nun kann man jeden beliebigen Typ in der Auflistung abspeichern und bearbeiten.

     

    Public Class CellCollection(Of T)

    Browsable(False), EditorBrowsable(EditorBrowsableState.Never), DebuggerBrowsable(DebuggerBrowsableState.Never)>

    Private innerList As New List(Of T)

    '...

     

    Also so etwas, wobei T den Typ einer Zelle darstellt. Leider ist T zu allgemein, ich müsste das schon einschränken. Ja - jeden beliebigen Typ, aber dieser muss die Parent -Eigenschaft zur Verfügung stellen. T an obiger Stelle kann auch eine Klasse werden, die bspw. eine Value-Eigenschaft bereitstellen muss um an den wirklichen Wert zu gelangen, ähnlich wie bei der KeyValuePair-Klasse.

    Ich grüble jetzt schon seit einigen Tagen darauf rum, aber irgendwie verfahre ich mich immer wieder und langsam gehen mir die Ideen aus.

     

    Danke für jede Hilfe

    Gruß Scotty

    • Bearbeitet Karsten Sosna Dienstag, 29. März 2011 16:37 Formatierung
    Dienstag, 29. März 2011 16:29

Antworten

  • Hallo Karsten,

    das scheint mir auch nicht ohne umfangreiches Programmieren zu gehen.

    Vielleicht kann etwas wie das folgende ein Ansatz sein.
    Mit Point ging das bei mir nicht. Keine Ahnung warum.

    Grüsse, Markus

    PS: Ist mehrmals geändert worden. Letzte Änderung: 04.04. 12:05 Uhr.

     

    Public Class Form1

      Private Point_Class_Item_List As Item_List(Of Point_Class)

      Private Form_Item_List As Item_List(Of Form)


      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Point_Class_Item_List = New Item_List(Of Point_Class) _
                        (AddressOf Item_List_Methods.Point_Class_Methods.Point_Class_Saving, _
                         AddressOf Item_List_Methods.Point_Class_Methods.Point_Class_Comparing)

        Form_Item_List = New Item_List(Of Form) _
                        (AddressOf Item_List_Methods.Form_Methods.Form_Saving, _
                         AddressOf Item_List_Methods.Form_Methods.Form_Comparing)

        Dim objPoint_Class As Point_Class

        Try
          Point_Class_Item_List.Item_Add(New Point_Class(1, 1))
          Point_Class_Item_List.Item_Add(New Point_Class(2, 2))
          Point_Class_Item_List.Item_Add(New Point_Class(3, 3))
          Point_Class_Item_List.Item_Add(New Point_Class(4, 4))
          Point_Class_Item_List.Item(2).X = 33
          Point_Class_Item_List.Item_Add(New Point_Class(5, 5))
          objPoint_Class = Point_Class_Item_List.Item(1)
          ' Dies muss innerhalb des Timer Intervalls geschehen. Siehe unten.
          objPoint_Class.X = 11


          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item(2).Text = "Form_2"
          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item(1).Text = "Form_1"

        Catch ex As Exception
          MsgBox(ex.Message)
        End Try

      End Sub

    End Class


    Public Class Point_Class
      Public X As Integer
      Public Y As Integer

      Public Sub New(ByVal pX As Integer, ByVal pY As Integer)
        X = pX
        Y = pY
      End Sub
    End Class


    Public Class Item_List(Of T)

      ' Zum Sichern der Eigenschaften deren Änderung für Item_List von Bedeutung ist.
      Public Delegate Function Item_Saving_Delegate_Def(Of T1) _
                               (ByVal Item_To_Save As T, _
                                ByRef Item_Save_Out As T) As Boolean

      Public Delegate Function Item_Comparing_Delegate_Def(Of T1) _
                               (ByVal Item_In_Item_List As T, _
                                ByVal Item_Save As T) As Boolean

      Private Class Item_Acess
        Public Access_Time As DateTime
        Public Index As Integer
        Public Item_Save As T
      End Class

      Private innerList As New List(Of T)

      ' Eine Liste die in der Reihenfolge des Hinzufügens der Elemente sortiert ist.
      ' In der Reihenfolge der Add Aufrufe.
      Private Item_Access_Collection As New Collection
      Private WithEvents Item_Access_Collection_Timer As Timer

      Private Item_Saving_Delegate As Item_Saving_Delegate_Def(Of T)
      Private Item_Comparing_Delegate As Item_Comparing_Delegate_Def(Of T)


      Default ReadOnly Property Item(ByVal pIndex As Integer) As T
        Get
          ' Fehler wird im Aufrufer abgefangen.
          Dim Item_Save As T

          Item_Saving_Delegate.Invoke(innerList(pIndex), Item_Save)

          Dim objItem_Access As New Item_Acess
          With objItem_Access
            .Access_Time = Now
            .Index = pIndex
            .Item_Save = Item_Save
          End With
          Item_Access_Collection.Add(objItem_Access)

          Return innerList(pIndex)
        End Get
      End Property


      Public Sub Item_Add(ByVal Item As T)
        innerList.Add(Item)
      End Sub


      Public Sub New(ByVal pItem_Saving_Delegate As Item_Saving_Delegate_Def(Of T), _
                            ByVal pItem_Comparing_Delegate As Item_Comparing_Delegate_Def(Of T))
        MyBase.New()

        Item_Saving_Delegate = pItem_Saving_Delegate
        Item_Comparing_Delegate = pItem_Comparing_Delegate

        Item_Access_Collection_Timer = New Timer
        With Item_Access_Collection_Timer
          .Interval = 250
          .Enabled = True
        End With

      End Sub


      Private Sub Item_Access_List_Timer_Tick() Handles Item_Access_Collection_Timer.Tick
        Dim objItem_Access As Item_Acess
        Dim blnItem_Changed As Boolean

        Dim Time_Since_Access As TimeSpan
        Dim Item_Access_Process_Later_Collection As New Collection


        Try
          System.Windows.Forms.Application.DoEvents()

          Do While Item_Access_Collection.Count > 0
            objItem_Access = DirectCast(Item_Access_Collection(1), Item_Acess)
            Item_Access_Collection.Remove(1)

            Time_Since_Access = Now - objItem_Access.Access_Time

            ' Zur Sicherheit sollte seit dem Zugriff eine gewisse Zeitspanne
            ' vergangen sein.
            If Time_Since_Access.Milliseconds > 200 Then
              ' Hier kein Zugriff auf Item.
              blnItem_Changed = Item_Comparing_Delegate.Invoke(innerList(objItem_Access.Index), _
                                                                                            objItem_Access.Item_Save)
              If blnItem_Changed Then
                Me.Item_Changed(objItem_Access.Index)
              End If

            Else
              Item_Access_Process_Later_Collection.Add _
                   (objItem_Access)
            End If
          Loop

          For Each obj As Object In Item_Access_Process_Later_Collection
            Item_Access_Collection.Add(obj)
          Next

        Catch ex As Exception
          MsgBox(ex.Message)
        End Try
      End Sub


      Private Sub Item_Changed(ByVal index As Integer)
        MsgBox("Item " & GetType(T).Name & " changed at Index: " & index.ToString)
      End Sub
    End Class


    Public Class Item_List_Methods


      Public Class Point_Class_Methods

        Public Shared Function Point_Class_Saving(ByVal Point_Class_To_Save As Point_Class, _
                                                                    ByRef Point_Class_Save_Out As Point_Class) As Boolean
          ' Achtung: Code darf hier nicht auf Instance.Item zugreifen.
          '          Dies würde Endlosschleife ergeben.
          Point_Class_Save_Out = New Point_Class(0, 0)
          Point_Class_Save_Out.X = Point_Class_To_Save.X
          Point_Class_Save_Out.Y = Point_Class_To_Save.Y
          Return True
        End Function


        Public Shared Function Point_Class_Comparing(ByVal Point_Class_In_Item_List As Point_Class, _
                                                                          ByVal Point_Class_Save As Point_Class) As Boolean
          ' Achtung: Code darf hier nicht auf Instance.Item zugreifen.
          '          Dies würde Endlosschleife ergeben.
          Dim blnChanged As Boolean = False
          If Point_Class_In_Item_List.X <> Point_Class_Save.X _
          OrElse Point_Class_In_Item_List.Y <> Point_Class_Save.Y Then
            blnChanged = True
          End If
          Return blnChanged
        End Function

      End Class


      Public Class Form_Methods

        Public Shared Function Form_Saving(ByVal Form_To_Save As Form, _
                                                           ByRef Form_Save_Out As Form) As Boolean
          ' Achtung: Code darf hier nicht auf Instance.Item zugreifen.
          '          Dies würde Endlosschleife ergeben.
          Form_Save_Out = New Form
          Form_Save_Out.Text = Form_To_Save.Text
          Return True
        End Function


        Public Shared Function Form_Comparing(ByVal Form_In_Item_List As Form, _
                                                                 ByVal Form_Save As Form) As Boolean
          ' Achtung: Code darf hier nicht auf Instance.Item zugreifen.
          '          Dies würde Endlosschleife ergeben.
          Dim blnChanged As Boolean = False
          If Form_In_Item_List.Text <> Form_Save.Text Then
            blnChanged = True
          End If
          Return blnChanged
        End Function

      End Class


      '''''''''''''''''''''''''''''''''''''''''''''''''
      ' Itemklasse = X.
      '''''''''''''''''''''''''''''''''''''''''''''''''
      ' ...

    End Class




    Sonntag, 3. April 2011 17:33

Alle Antworten

  • So, neuer Versuch.

     

    Also folgende Collection als Vorgabe. Diese Klasse stellt ein Tabelle dar:

     

       Public Class CellCollection(Of T)

     

          Private innerList As New List(Of T)

     

          Public ReadOnly Property ColumnCount As Integer

          End Property

     

          Public ReadOnly Property RowCount As Integer

          End Property

     

          Default Public Property Item(columnIndex As Integer, rowIndex As Integer) As T

          End Property

     

          Public Sub AddColumn()

          End Sub

     

          Public Sub AddRow()

          End Sub

     

          Public Sub InsertColumn(index As Integer)

          End Sub

     

          Public Sub InsertRow(index As Integer)

          End Sub

     

          Public Sub RemoveColumnAt(index As Integer)

          End Sub

     

          Public Sub RemoveRowAt(index As Integer)

          End Sub

     

       End Class

     

    Wie man, hoffe ich, feststellen kann gibt es keine Möglichkeit dieser Collection eine einzelne Cell hinzuzufügen oder zu entfernen. Es können zwar Columns und Rows hinzugefügt, die Collection legt dann intern die einzelnen Cells an oder löscht sie. Was man aber tun kann ist die Item-Eigenschaft zu benutzen um auf die Cells zu zugreifen und deren Werte zu ändern. Genau hier liegt das Problem:

    Änderung an den Zellen bekommt die Collection nicht mit, es sei denn, das Item wird komplett „neu belegt“.

    Angenommen die Collection beinhaltet Werte vom Typ Point. Da würde die Collection zwar

     

    Dim Instanze = New CellCollection(Of Point)

    ‘…

    Instanze.Item(2, 3 ) = New Point(10,20)

     

    mitbekommen, jedoch nicht

     

    Instanze.Item(2, 3 ).X = 10

    Instanze.Item(2, 3 ).Y = 20

     

    Und genau dort liegt mein Problem.

     

    Ich hoffe jetzt ist das Problem klarer geworden

    --

    Gruß Scotty

    Dienstag, 29. März 2011 17:16
  • Hi,

    ich wüsste nicht, dass man das so global abfangen kann. Für eigene Klassen gibt es das Interface INotifyPropertyChanged, mit dem kann man sowas machen. Aber halt nicht für die andere Klassen, die man selbst nicht ändern kann.

     

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Dienstag, 29. März 2011 19:37
    Moderator
  • Hallo Stefan, hallo Thorsten,

    kann ich leider nicht als Antworten akzeptieren, weil diese Antwort nicht der Vorgabe enspricht. Selber habe ich noch keine Lösung gefunden. Ich gehe mal davon aus, das es auch nicht möglich ist.

    --

    Gruß Scotty

    Samstag, 2. April 2011 06:36
  • Hallo Karsten,
    kann ich leider nicht als Antworten akzeptieren, weil diese Antwort nicht der Vorgabe enspricht.

    welcher Vorgabe? Das, was Du vorhast, geht AFAIK eben nicht. Eine Möglichkeit für eigene Klassen (oder abgeleitete, wenn Du die Eigenschaften überschreibst) gibt es, für andere Klassen eben nicht. (Außer evtl. irgendwelche Debugger/Oberserver/ChangeTracker, die sich dann [mit u.U. extremen Performanceeinbrüchen] in sämtliche Aufrufe einbauen).

    Aber wo ist das Problem, die Klassen selbst nachzubauen bzw. davon zu erben (wenn erlaubt) und dort dann INotifyPropertyChanged zu implementieren? Du willst ja sicherlich nicht für alles, was das Framework bietet, sowas haben. Oder doch?

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Samstag, 2. April 2011 12:09
    Moderator
  • Hallo Stefan,

    welcher Vorgabe? Das, was Du vorhast, geht AFAIK eben nicht. Eine Möglichkeit für eigene Klassen (oder abgeleitete, wenn Du die Eigenschaften überschreibst) gibt es, für andere Klassen eben nicht. (Außer evtl. irgendwelche Debugger/Oberserver/ChangeTracker, die sich dann [mit u.U. extremen Performanceeinbrüchen] in sämtliche Aufrufe einbauen).

    Die Vorgabe ist einfach für eigentlich jedes beliebige Objekt, ohne es ableiten zu müssen. Sicherlich hast Du gesehen das ich „T“ als Typ angeben habe.

    Aber wo ist das Problem, die Klassen selbst nachzubauen bzw. davon zu erben (wenn erlaubt) und dort dann INotifyPropertyChanged zu implementieren? Du willst ja sicherlich nicht für alles, was das Framework bietet, sowas haben. Oder doch?

    Sicherlich kann man die Klassen nachbauen, aber warum wenn es vielleicht eine Möglichkeit ohne diesen Aufwand gibt. Heute ist vielleicht ein simpler Typ(z.B. Integer) und morgen ist dann schon ein PointF. Und nächste Woche? Da sind die Typen dran, die von Haus aus schon sehr komplex sind.

    Es gibt aber noch ein anderes Problem. Hast Du mal geschaut was die Klasse realisieren soll? Sie stellt eine Tabelle dar. Jetzt stell Dir mal vor ich habe 10 Spalten und dann fügen wir mal eben 1000 Zeilen hinzu(Das kann je nach Datenquelle durchaus passieren). Bedeutet dann auch 10.000 AddHandler. In diesem Zusammenhang konnte bisher niemand meine Fragen zu „Custom Events“ beantworten. Ich glaube nicht, dass die vielen Handler gerade zum Performancegewinn beitragen.

    Aus letztem Grund bin ich immer den Weg gegangen, dass das Item seinen Owner kennt, den es darüber informieren kann, wenn es Änderungen gab. Dieser Ansatz ist genauso hoch wie mit INotifyPropertyChanged, jedes Mal eine neue Klasse erstellen. Kompliziert wird es aber wenn jemand von meiner Item-Klasse erbt, woher soll der wissen, das PropertyChanged oder sonst was aufzurufen ist, wenn sich eine Eigenschaft geändert hat? Soviel Dokumentation kann man gar nicht schreiben, da die sowieso nicht gelesen wird.

    --

    Gruß Scotty

    Sonntag, 3. April 2011 03:26
  • Hallo Karsten,

    das scheint mir auch nicht ohne umfangreiches Programmieren zu gehen.

    Vielleicht kann etwas wie das folgende ein Ansatz sein.
    Mit Point ging das bei mir nicht. Keine Ahnung warum.

    Grüsse, Markus

    PS: Ist mehrmals geändert worden. Letzte Änderung: 04.04. 12:05 Uhr.

     

    Public Class Form1

      Private Point_Class_Item_List As Item_List(Of Point_Class)

      Private Form_Item_List As Item_List(Of Form)


      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Point_Class_Item_List = New Item_List(Of Point_Class) _
                        (AddressOf Item_List_Methods.Point_Class_Methods.Point_Class_Saving, _
                         AddressOf Item_List_Methods.Point_Class_Methods.Point_Class_Comparing)

        Form_Item_List = New Item_List(Of Form) _
                        (AddressOf Item_List_Methods.Form_Methods.Form_Saving, _
                         AddressOf Item_List_Methods.Form_Methods.Form_Comparing)

        Dim objPoint_Class As Point_Class

        Try
          Point_Class_Item_List.Item_Add(New Point_Class(1, 1))
          Point_Class_Item_List.Item_Add(New Point_Class(2, 2))
          Point_Class_Item_List.Item_Add(New Point_Class(3, 3))
          Point_Class_Item_List.Item_Add(New Point_Class(4, 4))
          Point_Class_Item_List.Item(2).X = 33
          Point_Class_Item_List.Item_Add(New Point_Class(5, 5))
          objPoint_Class = Point_Class_Item_List.Item(1)
          ' Dies muss innerhalb des Timer Intervalls geschehen. Siehe unten.
          objPoint_Class.X = 11


          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item(2).Text = "Form_2"
          Form_Item_List.Item_Add(New Form)
          Form_Item_List.Item(1).Text = "Form_1"

        Catch ex As Exception
          MsgBox(ex.Message)
        End Try

      End Sub

    End Class


    Public Class Point_Class
      Public X As Integer
      Public Y As Integer

      Public Sub New(ByVal pX As Integer, ByVal pY As Integer)
        X = pX
        Y = pY
      End Sub
    End Class


    Public Class Item_List(Of T)

      ' Zum Sichern der Eigenschaften deren Änderung für Item_List von Bedeutung ist.
      Public Delegate Function Item_Saving_Delegate_Def(Of T1) _
                               (ByVal Item_To_Save As T, _
                                ByRef Item_Save_Out As T) As Boolean

      Public Delegate Function Item_Comparing_Delegate_Def(Of T1) _
                               (ByVal Item_In_Item_List As T, _
                                ByVal Item_Save As T) As Boolean

      Private Class Item_Acess
        Public Access_Time As DateTime
        Public Index As Integer
        Public Item_Save As T
      End Class

      Private innerList As New List(Of T)

      ' Eine Liste die in der Reihenfolge des Hinzufügens der Elemente sortiert ist.
      ' In der Reihenfolge der Add Aufrufe.
      Private Item_Access_Collection As New Collection
      Private WithEvents Item_Access_Collection_Timer As Timer

      Private Item_Saving_Delegate As Item_Saving_Delegate_Def(Of T)
      Private Item_Comparing_Delegate As Item_Comparing_Delegate_Def(Of T)


      Default ReadOnly Property Item(ByVal pIndex As Integer) As T
        Get
          ' Fehler wird im Aufrufer abgefangen.
          Dim Item_Save As T

          Item_Saving_Delegate.Invoke(innerList(pIndex), Item_Save)

          Dim objItem_Access As New Item_Acess
          With objItem_Access
            .Access_Time = Now
            .Index = pIndex
            .Item_Save = Item_Save
          End With
          Item_Access_Collection.Add(objItem_Access)

          Return innerList(pIndex)
        End Get
      End Property


      Public Sub Item_Add(ByVal Item As T)
        innerList.Add(Item)
      End Sub


      Public Sub New(ByVal pItem_Saving_Delegate As Item_Saving_Delegate_Def(Of T), _
                            ByVal pItem_Comparing_Delegate As Item_Comparing_Delegate_Def(Of T))
        MyBase.New()

        Item_Saving_Delegate = pItem_Saving_Delegate
        Item_Comparing_Delegate = pItem_Comparing_Delegate

        Item_Access_Collection_Timer = New Timer
        With Item_Access_Collection_Timer
          .Interval = 250
          .Enabled = True
        End With

      End Sub


      Private Sub Item_Access_List_Timer_Tick() Handles Item_Access_Collection_Timer.Tick
        Dim objItem_Access As Item_Acess
        Dim blnItem_Changed As Boolean

        Dim Time_Since_Access As TimeSpan
        Dim Item_Access_Process_Later_Collection As New Collection


        Try
          System.Windows.Forms.Application.DoEvents()

          Do While Item_Access_Collection.Count > 0
            objItem_Access = DirectCast(Item_Access_Collection(1), Item_Acess)
            Item_Access_Collection.Remove(1)

            Time_Since_Access = Now - objItem_Access.Access_Time

            ' Zur Sicherheit sollte seit dem Zugriff eine gewisse Zeitspanne
            ' vergangen sein.
            If Time_Since_Access.Milliseconds > 200 Then
              ' Hier kein Zugriff auf Item.
              blnItem_Changed = Item_Comparing_Delegate.Invoke(innerList(objItem_Access.Index), _
                                                                                            objItem_Access.Item_Save)
              If blnItem_Changed Then
                Me.Item_Changed(objItem_Access.Index)
              End If

            Else
              Item_Access_Process_Later_Collection.Add _
                   (objItem_Access)
            End If
          Loop

          For Each obj As Object In Item_Access_Process_Later_Collection
            Item_Access_Collection.Add(obj)
          Next

        Catch ex As Exception
          MsgBox(ex.Message)
        End Try
      End Sub


      Private Sub Item_Changed(ByVal index As Integer)
        MsgBox("Item " & GetType(T).Name & " changed at Index: " & index.ToString)
      End Sub
    End Class


    Public Class Item_List_Methods


      Public Class Point_Class_Methods

        Public Shared Function Point_Class_Saving(ByVal Point_Class_To_Save As Point_Class, _
                                                                    ByRef Point_Class_Save_Out As Point_Class) As Boolean
          ' Achtung: Code darf hier nicht auf Instance.Item zugreifen.
          '          Dies würde Endlosschleife ergeben.
          Point_Class_Save_Out = New Point_Class(0, 0)
          Point_Class_Save_Out.X = Point_Class_To_Save.X
          Point_Class_Save_Out.Y = Point_Class_To_Save.Y
          Return True
        End Function


        Public Shared Function Point_Class_Comparing(ByVal Point_Class_In_Item_List As Point_Class, _
                                                                          ByVal Point_Class_Save As Point_Class) As Boolean
          ' Achtung: Code darf hier nicht auf Instance.Item zugreifen.
          '          Dies würde Endlosschleife ergeben.
          Dim blnChanged As Boolean = False
          If Point_Class_In_Item_List.X <> Point_Class_Save.X _
          OrElse Point_Class_In_Item_List.Y <> Point_Class_Save.Y Then
            blnChanged = True
          End If
          Return blnChanged
        End Function

      End Class


      Public Class Form_Methods

        Public Shared Function Form_Saving(ByVal Form_To_Save As Form, _
                                                           ByRef Form_Save_Out As Form) As Boolean
          ' Achtung: Code darf hier nicht auf Instance.Item zugreifen.
          '          Dies würde Endlosschleife ergeben.
          Form_Save_Out = New Form
          Form_Save_Out.Text = Form_To_Save.Text
          Return True
        End Function


        Public Shared Function Form_Comparing(ByVal Form_In_Item_List As Form, _
                                                                 ByVal Form_Save As Form) As Boolean
          ' Achtung: Code darf hier nicht auf Instance.Item zugreifen.
          '          Dies würde Endlosschleife ergeben.
          Dim blnChanged As Boolean = False
          If Form_In_Item_List.Text <> Form_Save.Text Then
            blnChanged = True
          End If
          Return blnChanged
        End Function

      End Class


      '''''''''''''''''''''''''''''''''''''''''''''''''
      ' Itemklasse = X.
      '''''''''''''''''''''''''''''''''''''''''''''''''
      ' ...

    End Class




    Sonntag, 3. April 2011 17:33