[VB] Matrizen ausgeben

1. glaub ich solltest du item.SubItems.Add(subItem) weglassen, da du das ParentItem im Konstruktor mit übergibst

2. Fragst du das Element arr[x][0] 2mal ab. Einmal beim Instanzieren des Items und einmal beim Istanzieren des 1. SubItems.

3. Debug doch deinen Code bitte, dann kannst du viel leichter feststellen, wo das Problem liegt, wieso der ListView nur ein Zeile ausgibt.
 
Ich hatte mich jedeglich an deinem Codebeispiel orientiert, daher die Aufrufe.
Beim Debuggen werden die Subitems auch ordentlich mit Werten belegt, doch nicht ausgegeben.

Edit:
Die Wert werden auch alle nebeneinander ausgegeben (wie Spalte), also keine neue Zeile angefangen.
 
Zuletzt bearbeitet:
Wenn alles in einer Zeile ausgegeben wird, dann wird das ListVIewItem nicht neu instanziert.
Du musst darauf achten, dass innerhalb der äußeren Schleife, das ListViewItem instanziert und dem ListView zugewiesen wird, und innerhalb der inneren Schleife die ListViewSubItems instanziert und dem ListViewItem zugewiesen werden.
 
niggo hat gesagt.:
Wenn alles in einer Zeile ausgegeben wird, dann wird das ListVIewItem nicht neu instanziert.
Du musst darauf achten, dass innerhalb der äußeren Schleife, das ListViewItem instanziert und dem ListView zugewiesen wird, und innerhalb der inneren Schleife die ListViewSubItems instanziert und dem ListViewItem zugewiesen werden.

Eigentlich hab ich das ja gemacht (siehe CodeBsp), aber ich bin mir nicht ob die Instanzierung richtig ist.
Könntest du mir da helfen? :)


p.s.: Bin nun seit 4h dabei .NET zu installieren (weil ich Festplatte formatieren mußte), aber nun hängt sich das während der Installation auf).
 
So, hab jetzt mal ein kleines Projekt erstellt, und der folgende Code funktioniert auf jeden Fall.

C#:
private void Form1_Load(object sender, EventArgs e)
        {
            string[,] matrix = new string[3, 10];
            for (int i = 0; i < 3; i++)
			{
                for (int j = 0; j < 10; j++)
			    {
			        matrix[i, j] = "test";
			    }
			}
            ListViewItem item;
            ListViewItem.ListViewSubItem subItem;
            for (int i = 0; i < 10; i++)
            {
                item = new ListViewItem(matrix[0, i]);
                for (int j = 1; j < 3; j++)
                {
                    subItem = new ListViewItem.ListViewSubItem(item, matrix[j, i]);
                    item.SubItems.Add(subItem);
                }
                listView1.Items.Add(item);
            }
        }

Ich hoffe, dass hilft dir. Wenn nicht, überprüf die Eigenschaften vom ListView.
Du musst als View "Details" auswählen und die entsprechende Anzahl an Spalten auch anlegen.
 
Zuletzt bearbeitet:
Ich danke dir :)

Leider kann ichs net probieren, da ich .Net einfach nicht mehr installiert bekomme (es hängt sich immer bei der Installation des .Net Frameworks auf) :(

Aber ich am Ball!!
 
Code:
Public Sub MatrixAusgeben(ByVal ReferenzMatrix As Integer(,))
        Dim Zeile As Integer
        Dim Spalte As Integer
        Dim Item As ListViewItem
        Dim subItem As ListViewItem.ListViewSubItem
        For Spalte = 0 To UBound(ReferenzMatrix, 2)
            Item = New ListViewItem(ReferenzMatrix(0, Spalte))

            For Zeile = 0 To UBound(ReferenzMatrix, 1)


                subItem = New ListViewItem.ListViewSubItem(Item, ReferenzMatrix(Zeile, Spalte))
                Item.SubItems.Add(subItem)

            Next Zeile
            ListView1.Items.Add(Item)
        Next Spalte

    End Sub

Jetzt gibt er nur die ertse Spalte aus.

Darf meine Matrix nicht vom Typ Integer sein?
Wenn ja wie convertiere ich in VB.net die Integer Matrix zu ne String Matrix

Mfg :)
 
Natürlich kann deine Matrix auch aus Werten vom Typ interger bestehen. Deine ganze Matrix brauchst und musst du auch nicht in String konvertieren. Wenn es erforderlich ist, kannst du die Methode ToString() aufrufen, die von der Klasse object geerbt wird. Die gibt entweder den Wert wider oder wenn nicht anders implementiert den Type-Name.

Wenn du schon den Code von mir nur kopierst, dann bitte richtig. Du musst die Zählschleife für deine Zeile mit 1 beginnen lassen, da du sonst das erste Element 2 mal abfragst.

Warum bei dir nur eine Spalte ausgegen wird, kann ich dir nicht sagen, dass musst du durch debuggen rausfinden.
Hat die Matrix auch mehr als eine Spalte? Gibt UBound(ReferenzMatrix, 2) auch das richtige zurück?
 
Sorry.
Es wird nur die 1. Zeile zurück gegeben.
Also irgendwie werden die subItems nicht angehangen (bzw. ausgegeben).

Edit: Also angehangen werden sie auch, doch weiterhin steh bei den Itme.subItems:
Item <cannot view indexed property> System.Windows.Forms.ListViewItem.ListViewSubItem


Sie werden aber richtig ausgelesen, zeile für zeile und spalte für spalte...

Die Änderungen hab ich gemacht.
 
Zuletzt bearbeitet:
Zurück