|
| Autor |
Nachricht |
tr4st_ « Moderator »

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


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? |
|
| |
|
 |
|
|