[VB] Matrizen ausgeben

magnificent

Mitglied
Hallo, ich würde gern mehrere Matrizen ausgeben, doch weiß ich nicht welches Steuerelement sinnvoll ist und wie ich dort die Werte reinbekomme. (jede Matrix in einem extra Element)
Edit: Das ganze findet in VB.net statt.

Hätte noch ein 2. Problem:
Ich habe eine Funktion die 2 Optionale Parameter enthält, es sind eindimensinale Arrays von Typ Integer. Nun muss man aber nen Default Parameter angeben...

Code:
Optional ByVal ZeitlPraef() As Integer = {1,1,1,1,1,1,1,1}
doch so funktioniert es nicht :(

Ich hoffe ihr könnt mir helfen, denn leider hab ich keine Zeit mir ein Buch zu schnappen...
Mfg :)
 
Zuletzt bearbeitet:
Hi,

Für deine Matrizen kannst du ein DataGrid/DataGridView oder ein ListView verwenden. Wie du das jeweilige Control füllst hängt davon ab, wie du erstens deine Daten vorliegen hast.

Bzgl. Optional / Default-Parameter.
Erstmal bin ich der Meinung, dass das eine Unschönheit von VB ist, da sowas auch sehr fehleranfällig ist.
Ich glaub auch nicht, dass es möglich ist, ein Array mit Default-Value im Funktionskopf zu initialisieren.
 
Am besten realisierst du optionale Parameter durch Überladen der Methode (dies entspricht auch mehr dem Prizip der OOP ;-) ):
Code:
  Private Sub start()
        Dim param1 As String
        Dim param2 As Integer()
        Dim param3 As Integer()

        fun(param1)
        fun(param1, param2)
        fun(param1, param2, param3)
    End Sub

    Private Function fun(ByVal param1 As String) As Boolean
        'ohne optionale Parameter
        Dim param2 As Integer() = {}
        Return (fun(param1, param2))

    End Function

    Private Function fun(ByVal param1 As String, ByVal param2() As Integer) As Boolean
        'bei einem Parameter
        Dim param3 As Integer() = {}
        Return (fun(param1, param2, param3))

    End Function

    Private Function fun(ByVal param1 As String, ByVal param2() As Integer, ByVal param3() As Integer) As Boolean
        'Hier die Function, die 2 Optionale Parameter enthalten soll

        Return True
    End Function
 
Thx für die Antworten :)
Bezgl. der Optionalen Parameter werde ich wohl erstmal die Fkt. 2mal aufrufen, bis die Realisierung als OO gegeben wird (denn bisher soll es nur ein Test sein).

Die Matrizen befinden sich in 2dim. Arrays (je ein 2dim Arry pro Matrix).
Doch wie bekomm ich das jetzt in den ListView oder den Grid?

Bin euch sehr dankbar für die Hilfe, da ich dies noch diese Woche umsetzen muss.
Mfg :)
 
In dem du mit 2 Zählschleifen dir jedes Item aus dem Array geben lässt und dafür z.B. ListViewItems anlegst.

in etwa so (!untested!):
C#:
for(int i = 0; i < x; i++)
{
	ListViewItem item = new ListViewItem(arr[i][0]);
	for (int j = 1; j < y; j++)
	{	
		ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem(arr[i][j]);
		item.SubItems.Add(subItem)
	}
	listView.Items.Add(item);
}
 
Danke.
Hab das jetzt mal in VB.net umgesetzt, aber leider bekomme ich noch Fehlermeldungen.

Code:
  Public Sub MatrixAusgeben(ByVal ReferenzMatrix As Integer(,))
        Dim Zeile As Integer
        Dim Spalte As Integer
        For Zeile = 0 To UBound(ReferenzMatrix, 1)
            Dim Item As ListViewItem
            Item = New ListViewItem(ReferenzMatrix(Zeile, 0))
            For Spalte = 0 To UBound(ReferenzMatrix, 2)
                Dim subItem As ListViewItem.ListViewSubItem
                subItem = New ListViewItem.ListViewSubItem(ReferenzMatrix(Zeile, Spalte))
                Item.SubItems.Add(subItem)
                ListView.Items.Add(Item)
            Next Spalte
        Next Zeile
    End Sub
Bei: subItem = New ListViewItem.ListViewSubItem(ReferenzMatrix(Zeile, Spalte))
kommt diese Meldung:
Die Überladungsauflösung ist fehlgeschlagen, da keine zugreifbare "New" diese Anzahl von Argumenten akzeptiert.

Bei: ListView.Items.Add(Item)
kommt diese Meldung:
Um auf ein Member zuzugreifen, das nicht als "Shared" deklariert ist, muss ein Objektverweis verwendet werden.
(resultiert wohl aus der 1.Fehlermeldung)

Mfg :)
 
Hallo.

Die Funktionen für die Erstellung und Bearbeitung der Matrizen sind ja fertig, doch ich habe Probleme mit der Ausgabe :(
Zum einen die genannten Fehlermeldungen und zum anderen wird es wohl mit der obigen Prozedur gar nicht gehen, denn irgendwie muss ich ja auch noch die jeweiligen ListViews ansprechen:
ListView1. irgendwas...

Mfg
 
Hi.
Fehlt wohl der String...

Code:
    Public Sub MatrixAusgeben(ByVal ReferenzMatrix As Integer(,))
        Dim Zeile As Integer
        Dim Spalte As Integer
        For Zeile = 0 To UBound(ReferenzMatrix, 1)
            Dim Item As ListViewItem
            Item = New ListViewItem(ReferenzMatrix(Zeile, 0))
            For Spalte = 0 To UBound(ReferenzMatrix, 2)
                Dim subItem As ListViewItem.ListViewSubItem
                subItem = New ListViewItem.ListViewSubItem(Item, ReferenzMatrix(Zeile, Spalte))
                Item.SubItems.Add(subItem)
                ListView1.Items.Add(Item)
            Next Spalte
        Next Zeile
    End Sub
Und die Sub ruf ich beim laden der Form auf.
Aber folgende Meldung:
Cannot add or insert the item '0' in more than one place. You must first remove it from its current location or clone it.

und wenn ich es so mache:
Code:
    Public Sub MatrixAusgeben(ByVal ReferenzMatrix As Integer(,))
        Dim Zeile As Integer
        Dim Spalte As Integer
        Dim Item As ListViewItem
        For Zeile = 0 To UBound(ReferenzMatrix, 1)

            Item = New ListViewItem(ReferenzMatrix(Zeile, 0))
            For Spalte = 0 To UBound(ReferenzMatrix, 2)

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

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

    End Sub
wird immer nur der 1.Wert je Zeile ausgegeben.

Oh je, das sieht gar nicht gut aus für Montag :(

Edit:
Gibt es noch andere Möglichkeiten für die Ausgabe, weil das Element scheint zu groß für die Ausgabe von >6 Matrizen.
Edit2:
Vielleicht einfach in einem Textfeld mit linebreak pro neuer Zeile
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück