VB. NET 2010 VSE - ListBox zeigt nichts an

Brabax

New member
#1
Moinsen,

Umgebung:
Visual Studio Express 2010 (-->sollte das der Grund sein, ich habe auch noch ne Ultimate Lizenz und würde dies auch damit testen)
VB .NET 2010

folgendes Problem:

Ich habe eine ListBox erstellt und die View auf Details eingestellt.

Im Designer bekomme ich die ListBox korrekt angezeigt.
Sobald ich allerdings das Programm ausführe, verschwinden die ColumnHeaders.
Ganz egal, ob ich Items (via Code oder im Designer) einfüge oder nicht.

Wenn ich die ListBox via Code fülle (und zuvor im Designer keine Colums eintrage), dann wird leider ebenfalls nichts angezeigt.

Kennt jemand dieses Problem und weisz Abhilfe?

Alternative: Welche Varianten gäbe es noch, Dateien eines Ordners in einer vergleichbaren Übersicht darzustellen?

Im Anhang sind 2 Bilder die noch Mal zeigen, was ich meine.

Hier der Code:

ListBox mit Columns füllen:
Code:
        'FileList einstellen
        list_files.Clear()
        list_files.View = View.Details

        With list_files.Columns
            .Add("Name")
            .Add("Dateigröße")
            .Add("Typ")
            .Add("Änderungsdatum")
        End With
ListBox mit Items füllen
Code:
            Dim fileInfo As System.IO.FileInfo

            For Each fileInfo In currentFiles '-->Array mit Files
                With list_files.Items '--> list_files ist die ListView
                    With .Add(fileInfo.Name)
                        .ImageIndex = 1
                        .SubItems.Add(fileInfo.Length)
                        .SubItems.Add(fileInfo.Extension)
                        .SubItems.Add(fileInfo.LastWriteTime)
                    End With
                End With
            Next (fileInfo)

        list_files.Refresh()
Danke schon Mal

lG
 

GrafZahl

Member of Honour
#2
ich nehme mal an statt einer ListBox verwendest du ein System.Windows.Forms.ListView ...

hast du mal versucht im debugger zu sehen ab wann die columns auflistung keine spalten mehr enthält?

schau dir auch mal alle calls zu list_files.Clear() an, falls es abgesehen von dem call in deinem ersten code block weitere gibt, und schau nach ob du nicht list_files.Items.Clear() meintest ...

als alternative würde ich dir das DataGridView nennen ... es unterstützt datenbindung, was dir das erzeugen der einträge erspart...

ich kann dir gerne ein beispiel in c# liefern ... bei vb überkommt mich die diffuse, subjektive (aber objektiv unbegründete) vermutung meine letzte mahlzeit könnte mir nochmal durch den kopf gehen ...
 

Brabax

New member
#3
Hi :)

Ja, ich meine ListView (...dat heisst doch allet irgendwie gleich :D )

Es gibt keine clears ausser dem einen (initialen) clear vor dem Befüllen und ganz am Anfang (und wenn dann sollten doch nur die Items verschwinden, nicht aber die ColumnHeaders, oder?). --> ich schau aber noch Mal

Das ListView-Element enthält von vornherein keine Columns mehr (testweise gestartet ohne, dass ich irgendwas mache, einfach im Designer ein neues erstellt und via Designer mit Daten gefüllt (Columns, Items, SubItems) -> keine ColumnHeader, kein Inhalt in der Detailansicht).

Ich schau mir DataGridView nachher mal an.

Beispielcode habe ich mir gestern bereits tausend und ein Mal angesehen, bis hin zum kompletten Kopieren von ode um auszuschließen, dass ich völlig zu doof bin :D
Aber Danke für das Angebot. :)

werde es nachher auch noch mal mit einem neuen WindowsForm testen ... vllt. gibt es ja Zeich(n)en-konflikte wegen eines anderen Elementes.

Danke erst Mal.

lG
 
Zuletzt bearbeitet:

GrafZahl

Member of Honour
#4
list_files.Clear() löscht sowohl items als auch columns

list_files.Items.Clear() löscht alle items

list_files.Columns.Clear() löscht alle columns
 

GrafZahl

Member of Honour
#6
ich würde aber, auch wenn das listview nun funktioniert zu datenbindung und entwurfsmustern wie M-V-VM raten ... produziert wartungsfreundlichere ergebnisse und macht einem allgemein das leben leichter ...
 

Brabax

New member
#7
Hi!

Es war das clear().
Ärgerlicher und doofer Fehler :(

Kannst du mir das mit den Entwurfsmustern näher erläutern bzw. Links dazu geben?

Danke

lG
 

GrafZahl

Member of Honour
#8
google wird dir zu MVVM oder M-V-VM einiges zu diesem speziellen sagen ...

kurz umrissen:

Model-View-ViewModel gilt quasi als nachfolger des Model-View-Controler musters ...

beide sollen dein datenmodell unabhänig von der anzeige machen

Model ist dein datenmodell also hier eine objektrepresentation deiner dateien/verzeichnisse ... ggf noch mit zusätzlichen objekten für kontext-abhänige sachverhalte

View ist die graphische oberfläche, oder das was der endbenutzer zu sehen bekommt ...

ViewModel ist die ebene die beide miteinander verbindet:

auf deiner oberfläche werden dinge abgebildet, die direkt auf eigenschaften der objekte deines modells zurückführbar sind (dateiname, größe, etc) ... allerdings gibt es auch dinge die in der oberfläche wichtig sind, die nichts mit deinem modell zu tun haben (beispielsweise welche tabellenzeilen markiert sind, oder welche elemente einer baumdarstellung gerade aufgeklappt sind)
dennoch gehören beide kategorien irgendwie zusammen ... (wenn eine tabellenzeile markiert ist, ist in der regel auch interessant welches objekt sie representiert)

daher würden diese dinge im viewmodell zusammengefasst: dein viewmodell hällt eine referenz auf ein oder mehr objekte aus der modell ebene, und leitet dessen eigenschaften (oder aggregate) die aus dem jeweiligen blickwinkel wichtig sind als seine eigenen eigenschaften weiter ... zudem hält es alle eigenschaften die nicht direkt vom modell abgeleitet werden (auswahl, ausgeklappt)

für verschiedene sichten auf dein datenmodell gibt es verschiedene viewmodelle ...

die so zusammengeführten eigenschaften aus beiden welten liegen nun abrufbereit in logischem zusammenhang der jeweiligen sicht in x objekten einer viewmodell-klasse ... per datenbindung wird die dann für gewöhnlich an das jeweilige view gebunden ... auswählen oder aus/einklappen von objekten ist damit im programmablauf möglich ... ohne dass dein programmablauf kenntnis des views also der oberfläche haben muss ...

auf die tour kannst du anschließend auch bei änderungen der oberfläche den änderungsaufwand im code in grenzen halten ...

die devise heißt "abhänigkeiten reduzieren" ...


entwurfsmuster sind kein allheilmittel, und speziell unerfahrenen leuten machen sie mitunter recht schnell kopfweh, aber im großen und ganzen kann man sich mit sowas viel arbeit sparen ...
 

Brabax

New member
#9
Hi!

Okay, davon habe ich bereits gehört. Ich konnte allerdings die Begrifflichkeiten nicht zuordnen.

Im Moment ist das ganze Spielerei um ein nebenbei ein wenig mehr Erfahrungen im Programmieren im .NET zu lernen (als FiSi wird man von der Programmierung ja gerne abgekaspelt).

Aber sobald ich hierbei gefühlt so weit bin, werde ich das Thema näher erforschen, Danke für den Hinweis.

lG
 
Oben