Array in anderer Sub benutzen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Berbatov.

    Array in anderer Sub benutzen

    Hey,
    ich habe folgendes Problem:

    Ich generiere mit dem _load Event ein neues Array, dass mit Daten aus einer .txt Datei gefüllt wird (das alles mit Hilfe eines Loops).

    Dieses Array würde ich allerdings gerne bei einem anderen _click Event nutzen. Ich bekomme allerdings die Meldung dass das nicht geht (weil es halt in einem höheren scope benutzt wird). Selbst innerhalb des _load events kann man das array schon nicht außerhalb des Loops ausgeben.

    Gibt es eine Möglichkeit dass Array zu erhalten? Ich habe es schon mit static anstelle von dim probiert, aber das klappt auch nicht.

    Edit:
    Ich hatte es vorher so, dass das array erst bei einem Aufruf des _click Events erstellt wird und das klappte auch soweit. Das Programm lagte allerdings für eine kurze Zeit, weil das halt ein relativ großes Array ist, von daher dachte ich es wäre besser das lieber beim _load zu machen, sodass wenn das Programm einmal offen ist, alles schon geladen hat.

    VB.NET-Quellcode

    1. Class Form1
    2. Dim Array As String()
    3. Private Sub Form1_Load(Byval usw.) Handles MyBase.Load
    4. Array = My.Computer.FIlesystem.Readalllines(deineDatei) 'Hier die Methode wie du die Datei zwueist benutzen
    5. Test()
    6. End Sub
    7. Private Sub Test()
    8. MsgBOx(Array)
    9. End Sub
    10. End Class
    Klar man kann ein Array für die ganze Form erstellen, aber für normal übergibt man das Array

    VB.NET-Quellcode

    1. Public Sub Form1_load(ByVal usw.) Handles bla bla bla
    2. Dim DasArray(laenge) as String
    3. ''array füllen usw
    4. AndererSub(DasArray())
    5. end sub
    6. Public Sub AndererSub(ByVal DasArray as String())


    Lg
    Symphonie89

    symphonie89 schrieb:

    aber für normal übergibt man das Array

    Das ist aber sehr suboptimal.
    Genau dafür stehen klasseninterne Variable, auch Arrays, zur Verfügung, zumal die Form_Load() zum Bereitstellen von Feldern nicht prädestiniert ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Gut ich glaube das hält jeder anders. ^^ Ich hab es jedenfalls so gelernt nicht so viele Übergreifende Variablen zu erstellen. Deswegen über ich die meisten Variablen auch an die jeweiligen Funktionen ^^

    EDIT: Am Anfang habe ich auch sehr viel Übergreifend gemacht für die ganze klasse halt und keine Variablen Übergeben. ^^
    und hast im Ernstfall Parameterlisten, die 1 km lang sind?
    Das ist nicht pflegbar.
    Was willst Du machen, wenn morgen Dein Chef kommt und sagt, Wir haben/brauchen jetzt 3 neue Parameter, pflegen Sie die bitte in alle 93 Prozeduren ein.
    Ich denke, da kommst selbst Du auf die Idee, diese in die Klasse reinzuschreiben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    je nach Gebrauch der Variablen wäre es sehr sinnvoll sie übergreifend zu setzen ab er ich Denke nicht das es bei zwei Verwendungen Sinnvoll ist. Aber wie gesagt ich denke da hat jeder Programmierer ob Hobby oder Beruflich seine eigenen Standards.

    Und ja wenn man jetzt eine Variable in 100 Subs/Functions benötigt ist es Logischerweise recht sinnvoll diese Übergreifend zu erstellen ^^ Dagegen sag ich auch nichts oder ? ^^

    Nun sind wir wieder alle zufrieden geben uns schön Patschehändchen und haben uns wieder Lieb xD

    Lg
    Symphonie89
    Ich bekomm das irgendwie nocht nicht ans laufen. Habs testweise mit einem ganz simplen Array ausprobiert:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ...
    3. Dim testarray() As Integer = {5, 10, 20}
    4. dgvTable_CellClick(testarray())
    5. End Sub
    6. ...
    7. Private Sub dgvTable_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs, ByVal testarray As Integer()) Handles dgvTable.CellClick
    8. Debug.Print(CStr(testarray(1)))
    9. ...
    10. End Sub


    Produziert folgende Errors:
    • Number of indices is less than the number of dimensions of the indexed array. 186 (dgvTable_CellClick(array()) Reihe)
    • Method 'Private Sub dgvTable_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs, testarray() As Integer)' cannot handle event 'Public Event CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs)' because they do not have a compatible signature. (Ich habs sowohl mit () hinter integer als auch hinter dem array versucht. Hab beide Methoden im Netz gefunden)

    Auch die Methode von leseratte will nicht funktionieren

    VB.NET-Quellcode

    1. Dim testarray() As Integer
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. ...
    4. testarray(0) = 10
    5. testarray(1) = 5
    6. testarray(2) = 6
    7. dgvTable_CellClick()
    8. End Sub
    9. ...
    10. Private Sub dgvTable_CellClick(ByVal sender As Object, ByVal e As
    11. System.Windows.Forms.DataGridViewCellEventArgs) Handles
    12. dgvTable.CellClick
    13. Debug.Print(CStr(testarray(1)))
    14. ...
    15. End Sub

    • Argument not specified for parameter 'e' of 'Private Sub dgvTable_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs)'.
    • Argument not specified for parameter 'sender' of 'Private Sub dgvTable_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs)'. (Beide für Zeile dgvTable_CellClick())