Variable von Public Function übernehmen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Variable von Public Function übernehmen

    Moin Moin zusammen,...

    ich versuch nun schon seit 2 Stunden auf eine Variable zuzugreifen die in einer Public Function ist...
    Hier mal mein Code...

    VB.NET-Quellcode

    1. Imports System.Net
    2. Public Class Form1
    3. Public Function scanImage() As String
    4. 'Pfad zur Temp Datei des erfassten Bildes
    5. Dim strTempImagePath As String = String.Empty
    6. 'Windows GUI zur Interaktion mit dem Gerät
    7. Dim wiaDialog As New WIA.CommonDialog
    8. 'Variable für das erfasste Bild
    9. Dim wiaImage As WIA.ImageFile = Nothing
    10. Try
    11. 'Aufruf der Windows GUI zur Interaktion mit dem Gerät,
    12. 'rückgabe ist das erfasste Bild
    13. wiaImage = wiaDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, , , , False, )
    14. Catch ex As Exception
    15. MsgBox("Ein Fehler ist aufgetreten! Überprüfen Sie ob das Gerät Eingeschaltet und angeschlossen ist." & Environment.NewLine & Environment.NewLine & ex.Message)
    16. End Try
    17. If Not wiaImage Is Nothing Then
    18. 'Bild temporär Speichern
    19. Dim rnd As New Random
    20. Dim ZufallsZahl As Integer = rnd.Next(12, 600000000)
    21. Dim filename As String = "tempfile_" & ZufallsZahl & ".jpg"
    22. Dim filetarget As String = "C:\Temp\tempfile_" & ZufallsZahl & ".jpg"
    23. wiaImage.SaveFile(filetarget)
    24. PictureBox1.Image = New Bitmap(filetarget)
    25. Else
    26. MsgBox("Es wurde kein Bild erfasst!", MsgBoxStyle.Exclamation, "Information")
    27. End If
    28. Return strTempImagePath
    29. End Function
    30. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    31. scanImage()
    32. End Sub
    33. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    34. My.Computer.Network.UploadFile(filetarget, "ftp://server.de/tmp/" & filename, "benutzer", "passwort")
    35. End Sub
    36. End Class


    und zwar geht es mir um die filetarget & der filename in Private Sub Button2...
    Deklariert sind diese oben drüber in der scanImage() Funktion.

    Kann mir da vielleicht jemand helfen? Bestimmt ne simple Lösung aber ich bekomms leider nicht hin :(

    Danke Stefan
    Nein! Doch! OHH!
    Kann so auch nicht funktionieren.
    Du musst die Variable ausserhalb der Methode und innerhalb der Klasse deklarieren, das heißt:

    VB.NET-Quellcode

    1. Imports System.Net
    2. Public Class Form1
    3. Public filename As String = Nothing
    4. Public filetarget As String = Nothing
    5. Public Function scanImage() As String
    6. ...
    7. filename = "tempfile_" & ZufallsZahl & ".jpg"
    8. filetarget = "C:\Temp\tempfile_" & ZufallsZahl & ".jpg"
    9. ...
    10. End Function

    Für sowas kann man auch Structures oder gar Klassen benutzen.

    VB.NET-Quellcode

    1. ​Private Structure ScanFileInfo
    2. Public filename As String
    3. Public filetarget As String
    4. Public tempPath As String
    5. End Structure
    6. [...]
    7. Public Function scanImage() As ScanFileInfo

    Dann halt klassenweit eine Variable ScanFileInfo deklarieren, im Button1_Click zuweisen und im Button2_Click checken ob gefüllt und wenn ja uploaden.

    samson schrieb:

    Genial
    Das nennt man Skop einer Variable: Der Code-Bereich, in dem sie sichtbar 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!
    Übrigens sollte man ein Random immer auf Klassenebende instanzieren.
    Es existiert ein Interesse an der generellen Rezession der Applikation relativ primitiver Methoden komplimentär zur Favorisierung adäquater komplexer Algorithmen.
    ------------------------------------------------------------------------------------
    Rising Existence - das GTA V-MP Projekt mit Zukunft und Innuvation
    @Maik H. Danke für die Info... jedoch benötige ich es nur kurzfristig als einmaligen Dateinamen... anschließend wird es mit der MySQL DB verknüpft...
    Was mich ja eigentlich zu einer anderen Frage bringt... Ist es besser die Daten per FTP hochzuladen oder per webclient zu "Posten"...
    Wenn ich als gegenstück eine "upload.php" mache, wird der Dateiname beim upload wieder geändert und in die SQL instanz aufgenommen...
    Nein! Doch! OHH!

    samson schrieb:

    jedoch benötige ich es nur kurzfristig als einmaligen Dateinamen
    Zufällig wem gegenüber?
    Da kannst Du auch gleich 42 reinschreiben.
    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!