VB.NET: Änderungsüberwachung für CheckedListBox

16/10/2009 - 14:49 von Tobias Sendel | Report spam
Hallo,

ich sitze gerade recht ratlos vor einem VB.NET 2008-Problem: Ich
möchte für Steuerlemente mit Mehrfachauswahl (z.B. CheckedListBox)
eine Änderungsüberwachung einbauen. Bei einem Steuerlement mit
Einfachauswahl làsst sich das noch elegant über die
Zwischenspeicherung als String erledigen:

dim strOldValue as string

private sub test ()
if ComboBox1.Text <> strOldValue then
'do something
strOldValue = ComboBox1.Text
else
'do nothing or something else
end if
end sub

Bei einem Element mit Mehrfachauswahl müsste ich aber schon ein Array
bauen und jedes Mal alle Elemente einzeln abfragen. Sollen nun noch
mehrere Zwischenstànde gespeichert werden, so sind bei der
Einfachauswahl ein einfaches Array nötig (das geht noch), aber wenn
ich Steuerelemente mit Mehrfachauswahl überwachen will, schon ein
verschachteltes Array. Meiner Meinung nach nicht elegant und sehr
fehleranfàllig.

Gibt es dafür eine Idee, wie man so etwas elegant lösen kann?

Ich habe schon probiert, die ChecekdItemCollection direkt als solche
zwischenzuspeichern, soweit ich weiß, handelt es sich dabei aber um
einen Referenztyp, so dass die Änderung am "Live"-Element auch das
zwischengespeicherte Element überschreibt und damit die
Änderungsüberwachung hinfàllg macht.

Irgendwelche Ideen? Ich wàre sehr dankbar

Grüße, Tobi S.
 

Lesen sie die antworten

#1 Marcel Müller
16/10/2009 - 15:06 | Warnen spam
Hallo,

die Frage hàtte eigentlich eher in eine der MS-Gruppen rund um .NET gepasst.

Tobias Sendel wrote:
[...]
Bei einem Element mit Mehrfachauswahl müsste ich aber schon ein Array
bauen und jedes Mal alle Elemente einzeln abfragen. Sollen nun noch
mehrere Zwischenstànde gespeichert werden, so sind bei der
Einfachauswahl ein einfaches Array nötig (das geht noch), aber wenn
ich Steuerelemente mit Mehrfachauswahl überwachen will, schon ein
verschachteltes Array. Meiner Meinung nach nicht elegant und sehr
fehleranfàllig.

Gibt es dafür eine Idee, wie man so etwas elegant lösen kann?



Das ist an sich schon der Weg. Ob es nun technisch gesehen ein Array ist
oder irgendetwas serialisiertes, ist an sich egal. Logisch gesehen
bleibt es ein Array.


Ich habe schon probiert, die ChecekdItemCollection direkt als solche
zwischenzuspeichern, soweit ich weiß,



Keine gute Idee, die Hilfsklassen von Controls künstlich am Leben zu
halten. Da hàngen oft ganze Abhàngigkeitsbàume von Objekten dran, die
dann nicht von GC weggeràumt werden. Das kann riesige Mengen Speicher
verschlingen.

Es führt letztlich kein weg daran vorbei, mindestens ein Array mit
Primàrschlüsseln zu jedem Stand zu sichern. Damit hat man auch gleich
potentiell undefiniertes Verhalten im Griff, das auftritt, wenn sich
wàhrend dem Postback der Datenbestand und damit die Auswahlmöglichkeiten
àndern.


Marcel

Ähnliche fragen