Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten
Autor
Nachricht
tr4st_
« Moderator »<b><font color=green>« Moderator »</font



Anmeldedatum: 17.12.2007
Beiträge: 315
Wohnort: Private Class _ Villa()

ListView SubItem wird nicht korrekt ausgelesen
Verfasst am: 13.06.2009, 13:56

Guten Tag,

folgendes Problem beschäftigt mich bereits seitdem gestrigen Tag.

Ich habe bereits mehrere Stunden die Google Suchfunktion genutzt sowie die MSDN Online Hilfe in Anspruch genommen, nur leider bisher ohne Ergebnis.

Ich arbeite an einem Arbeitsstunden- und Verdienstrechner, welcher eine ListView beinhaltet.

Diese ListView hat die Eigenschaften ".View = View.Details" und ".FullRowSelect = True".

Beim _Load Event der Applikation werden die Columns erstellt:
Code:
With ListView1.Columns
            .Add("Tag")
            .Add("Stunden")
            .Add("Kommentar", 202)
End With

Nun lasse ich in der Spalte "Tag" die 31 Tage eines Monats zur Laufzeit generieren:
Code:
For Counter As Integer = 0 To 30
            With ListView1.Items
                With .Add(Counter + 1 & ".")
                End With
            End With
Next Counter

Im Anschluß lasse ich noch den heutigen Tag grün unterlegen:
Code:
With ListView1.Items
            .Item(DateTime.Now.Day - 1).BackColor = Color.Green
            .Item(DateTime.Now.Day - 1).ForeColor = Color.White
End With

Die ListView Eigenschaft .Activation steht auf TwoClick.

Sofern ich nun einen Doppelklick auf eine Reihe mache, wird eine neue Form aufgerufen in welcher ich die "Stunden" und einen "Kommentar" eintragen kann.

Wenn ich dann den Button "Speichern" klicke wird folgendes ausgeführt:

Ich zähle alle ListView Item Einträge "ListView1.Items.Count" und weise diesen Wert der Variable "CountedRows As Integer" zu.

Dann durchlaufe ich eine Schleife um den Wert des selektierten Item zu ermitteln:
Code:
For Counter = 0 To CountedRows - 1
            If frmStart.ListView1.Items.Item(Counter).Selected = True Then
                Exit For
            End If
Next Counter

Habe ich den Wert welcher selektiert ist gefunden so verlasse ich die Schleife und übergebe den Wert "Counter" welcher noch aktuell den selektierten Item Wert besitzt die SubItem erstellung weiter:
Code:
With frmStart.ListView1.Items(Counter)
            .SubItems.Add(TextBox1.Text) ' Stunden Eintrag
            .SubItems.Add(TextBox2.Text) ' Kommentar Eintrag
End With

Nun befinde ich mich wieder in meiner Start Form und sehe beide Einträge korrekt an dem Tag welcher selektiert wurde.

Klicke ich nun den Button "Berechnen" so soll die Applikation mir anhand der SubItem Einträge "Stunden" die gesamt Stunden sowie auch den gesamt Verdienst berechnen, was ich wie folgt löse:
Code:
Dim ArbeitsStundenGes As Integer
        Dim VerdienstGes As Integer
        Dim VerdienstProStunde As Integer = "7"
        Dim InhaltListView As Integer

        For Counter As Integer = 0 To ListView1.Items.Count - 1
            InhaltListView = ListView1.Items(Counter).SubItems(0).Text
            ArbeitsStundenGes += InhaltListView
        Next Counter

        VerdienstGes = ArbeitsStundenGes * VerdienstProStunde
        TextBox1.Text = ArbeitsStundenGes & "h [ " & VerdienstGes & "€ ]"


Und hier liegt das eigentliche Problem, "ListView1.Items(Counter).SubItems(0).Text" gibt immer nur den Item Wert zurück und nie den SubItem Wert!

Warum ist das so und wie kann ich das korrekt lösen?
Avoid Suspicion, Manipulate your friends, Eliminate your enemies.
 
ShockerZz
Tutorial Leser
Tutorial Leser



Anmeldedatum: 04.04.2009
Beiträge: 34


Verfasst am: 13.06.2009, 17:06

Das Programm macht genau das was du ihm sagst, was übrigens jedes Programm zu jeder Zeit tut. Nur manchmal wissen wir nicht, was wir da eigentlich sagen.

Das Array SubItmes() ist wie folgt aufgebaut:
Slot 0: Item unter der 1. Column, in dem Fall Tag.
Slot 1: Item unter der 2. Column, in dem Fall Stunden.
Slot 2: Item unter der 3. Column, in dem Fall Kommentar.

Wenn du dem Programm also sagst "ListView1.Items(Counter).SubItems(0).Text", wird es wohl oder übel den Tag zurückgeben (das paradoxerweise gleichzeitig Item und SubItem ist, also sich selbst untergeordnet ist). Wenn du also die Stunden zurückgegeben haben willst, musst du das zweite SubItem (also Slot 1) aufrufen.

Auch wenn ich gerne zugebe, dass das ganze etwas seltsam anmutet (weil Item=SubItem(1)), hättest du doch einfach mal testen können, was im 1. Slot (also SubItems(1)) steckt, oder?
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Fragen - Antworten

Tags: listview item, subitem, subitems

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge [suche] Tuturials winsock & daten senden 983 09.06.2011, 13:19
Keine neuen Beiträge [Video] *.dll & *.ocx Installer 2612 06.03.2008, 21:19
Keine neuen Beiträge ListView speichern & laden 1331 05.08.2008, 13:32
Keine neuen Beiträge Registry & Co Fragen 1203 03.05.2007, 10:57
Keine neuen Beiträge Listbox speichern & laden 2270 22.03.2007, 21:25
 


[ Time: 0.0826s ][ Queries: 85 (0.0406s) ][ GZIP on - Debug on ]