VB6 Events gibt es wohl nicht?

  • VB6

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    VB6 Events gibt es wohl nicht?

    Hallo,

    ich schaue mir gerade eine vbp an. Sieht aus wie die Excel-Makros

    Wie sieht denn hier das "Load-Event" aus? Bzw. wenn ich das Programm verstehen möchte, wo muss ich den Anfang suchen? Bei den .NET Projekten schaue ich immer nach dem Load-Event
    Aber sowas gabs in VB6 wohl noch nicht.

    Da stehen aber einige Male solchen Zeilen:
    WirktwieeinMethodenName: Aber eine Methode mit dem entsprechenden Namen gibt es dann nicht. Ist das überhaupt ein Methodenaufruf oder wird da was definiert?

    Hab mit Excel-Makros auch schon ganz bissel gearbeitet, da hatte ich aber nur eine Methode in einem Modul und Methoden ruft man da mit Call auf. So ein Call hab ich in der vbp aber z.B. auch nicht ?(
    Manchmal steht ein Methodenname einfach so da. Das ist womöglich ein Aufruf. Aber der Anfang ist irgendwie nicht klar

    Viel Grüße

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    @Haudruferzappeltnoch Kannst Du den VB6-Code mal posten?
    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!
    Das ist immer in der Schreibweise Controlname_Event
    Form1_Load()
    TextBox1_TextChanged()
    DeinButton_Click()
    So erkennt VB6, welche Methode bei welchem Event aufgerufen werden soll.

    Während man also bei VB.NET mehrere Zuhörer/EventHandler für ein Event festlegen kann, geht das bei VB6 (wohl) nicht. Da muss der eine EventHandler von sich aus weitere Methoden aufrufen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Haudruferzappeltnoch schrieb:

    wenn ich das Programm verstehen möchte, wo muss ich den Anfang suchen?

    In der *.vbp-Datei gibt es entweder Startup="Sub Main" (dann gibt es in irgendeinem Modul eine Prozedur Sub Main()) oder Startup="frmMain", wobei frmMain hier beispielhaft für ein Formular ist.

    Und WirktwieeinMethodenName: sieht für mich nach einer Sprungmarke aus, zu der man mit GoTo springen kann.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    @RodFromGermany
    Ich werde den Code mal kürzen und dann morgen hier posten, der ist so nämlich tüchtig lang...

    Ein frmMain hab ich gefunden, jau da steht auch eine Sub Form_Load drin. Eine Sub Main oder Startup kann ich so nicht finden.
    in dem frmMain kann ich oben aber ganz ähnlich zu Form-Events in .NET Methoden bzw. Handler auswählen

    @Haudruferzappeltnoch Hast Du eine VB6-Entwicklungsumgebung?
    Da gibt es Designer-ähnliche Dateien, da kannst Du "zu Fuß" Deine neue GUI quasi abschreiben.
    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!
    Hi

    Die .vbp ist relativ uninteressant. Da steht nur drin welche Verweise/Controls geladen werden müssen und welche Forms, Module, Klassen usw zum Projekt gehören usw. Unter anderem auch wo der StartUp zu finden ist. Letzteres sieht man auch in der VB6 IDE in den Projekteigenschaften.

    Bei dem bissel Code der da zu sehen ist, sehe ich schon zwei Sachen die nicht gut sind. Den End-Befehl sollte man, an dieser Stelle, nicht verwenden. In einer Sub Main wäre es noch ok, aber nicht in einer Form. On Error Resume Next ist auch so ein Ding. Du bekommst da nichts mit wenn da ein Fehler auftritt. VB6 macht dann einfach mit der nächsten Zeile weiter.
    Mfg -Franky-
    @RodFromGermany
    Das Programm womit ich die vbp öffne ist Microsoft Visual Basic 6.0, ich denke das ist genau diese Entwicklungsumgebung?
    Meinst du sowas wie eine Main.frm? Wenn ich die mit dem Notepad öffne, steht da zum einen der Code wie oben drin, zum anderen noch Designer-ähnliche Anweisungen
    Was meinst du mit zu Fuß abschreiben? Wenn ich in .NET die Form bauen möchte meinst du nehme ich mir von da einfach die Infos?


    Ich dachte eine vbp wäre das äquivalent zu einer sln @-Franky-
    Ja ich habe bei anderen .NET Projekten derselben Person auch eine ähnliche Qualität^^. Aber ich finde gerade deshalb sind die gut zum Lernen, weil man da viel ausbessern kann
    Nur VB6 das macht mir n bissle Schwierigkeiten, weil es sieht so ungewohnt aus. Ich würds wohl mal in VB.net nachstellen wollen.

    Was bedeuten wohl die Symbole? Sieht aus als gehören die Forms zusammen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Hi

    Jupp, im Prinzip hast Du recht. Die vbp ist sowas wie die sln. Wenn Du die VB6 IDE hast, einfach ein doppelklick auf die vbp um das VB6 Projekt zu laden. Oder halt in der IDE die vbp öffnen. In den Projekteigenschaften siehst dann den Startup. Das kann eine Form sein oder eine Sub Main die sich dann in einem Modul befindet.

    Die Designeranweisungen (frm, ctl, dob?) stehen immer am Anfang. Das sind im Prinzip Anweisungen welches Control das ist, deren Properties und man erkennt wer der Parent des Control ist.
    Mfg -Franky-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-Franky-“ ()

    Ah ja in den "Projekteigenschaften" finde ich im Reiter Allgemein ein "Startobjekt" als frmMain festgelegt. Das wird es dann wohl sein?
    Dann ist die Frage springt der da automatisch in die Form_Load? Das meinst du glaube ich @VaporiZed? Dass diese Methode wie ein Eventhandler agiert?
    Die Methode wird nirgendwo codetechnisch aufgerufen.
    Dennoch ists die erste Form die zu sehen ist, wenn man es mal anschaltet und ich schaffe auch keine zweite Instanz aufzurufen also die Methode scheint zu arbeiten.

    Also habe mal einen Ausschnitt einfach rausgenommen in dem das vorkommt mit dem Methodenname und Doppelpunkt. Das Programm selbst kann Etiketten zu Produkten automatisiert basteln und drucken:
    Spoiler anzeigen

    Visual Basic-Quellcode

    1. If u_kundenr = 0 Or u_kundenr = " " Or IsNull(u_kundenr) = True Then
    2. Do While Not rstLogos.EOF
    3. If InStr(UCase(kundeort), "DE-") > 0 Or _
    4. ladezone = 99 Then
    5. auswNr = 100
    6. Else
    7. auswNr = 1
    8. End If
    9. If rstLogos.Fields("LogoNr") = auswNr Then
    10. poslogo = rstLogos.Fields("PosLogo")
    11. logo = rstLogos.Fields("LogoDatei")
    12. End If
    13. If InStr(UCase(kunde), UCase(rstLogos.Fields("FaName"))) > 0 Then
    14. poslogo = rstLogos.Fields("PosLogo")
    15. logo = rstLogos.Fields("LogoDatei")
    16. komo = Null
    17. If IsNull(rstLogos.Fields("ZPosLogo")) = False Then
    18. zposlogo = rstLogos.Fields("ZPosLogo")
    19. zlogo = rstLogos.Fields("ZLogoDatei")
    20. End If
    21. neulogo = 1
    22. GoTo resumeEti
    23. End If
    24. rstLogos.MoveNext
    25. Loop
    26. Else
    27. Do While Not rstLogos.EOF
    28. If InStr(UCase(u_kundeort), "DE-") > 0 Or _
    29. ladezone = 99 Then
    30. auswNr = 100
    31. Else
    32. auswNr = 1
    33. End If
    34. If rstLogos.Fields("LogoNr") = auswNr Then
    35. poslogo = rstLogos.Fields("PosLogo")
    36. logo = rstLogos.Fields("LogoDatei")
    37. End If
    38. If InStr(UCase(u_kunde), UCase(rstLogos.Fields("FaName"))) > 0 Then
    39. poslogo = rstLogos.Fields("PosLogo")
    40. logo = rstLogos.Fields("LogoDatei")
    41. komo = Null
    42. If IsNull(rstLogos.Fields("ZPosLogo")) = False Then
    43. zposlogo = rstLogos.Fields("ZPosLogo")
    44. zlogo = rstLogos.Fields("ZLogoDatei")
    45. End If
    46. neulogo = 1
    47. GoTo resumeEti
    48. End If
    49. rstLogos.MoveNext
    50. Loop
    51. End If
    52. 'rstLogos.Close
    53. resumeEti: ''''''''''''Diese Zeile meine ich
    54. If erstens = 1 Then
    55. Dim rsTemp As ADODB.Recordset
    56. Dim sql As String
    57. Set rsTemp = New ADODB.Recordset
    58. rsTemp.CursorType = adOpenDynamic
    59. rsTemp.LockType = adLockOptimistic
    60. rsTemp.CursorLocation = adUseServer
    61. sql = "DELETE From etiketten WHERE LaufNr = " + Str(laufnr) + ";"
    62. rsTemp.Open sql, my_conn, adOpenKeyset, adLockOptimistic
    63. Set rsTemp = Nothing
    64. erstens = 0
    65. End If
    66. ...

    Sind das Sprungpunkte? Hier hab ich ein GoTo zu resumeEti. Das ist dann quasi nur eine andere Art Methodenaufruf?
    Oder wie werden Sprungpunkte in .NET nachgebildet?

    Dieser Beitrag wurde bereits 11 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Haudruferzappeltnoch schrieb:

    meinst du nehme ich mir von da einfach die Infos?
    Klar.
    Per C&P bekommst Du die GUI nicht nach .NET portiert.
    Da Du den Editor hast, wird das noch etwas einfacher aber nicht einfach.
    Erstell ein Fenster gleicher Größe und zieh Dir die richtigen Controls drauf. Position, Größe usw. schreibst Du dann von VB6 ab.
    Die Events klickerst Du dann für jedes einzelne Control durch, erstellst sie mit .NET-Methoden und übernimmst den Quelltext.
    Ich würde zuerst den kompletten VB6-Quelltext in die entsprechenden .NET-Prozeduren kopieren und danach die Syntax korrigieren.
    Das kannst Du natürlich auch Prozedur-weise tun, aber wenn der Code gut geschrieben ist, macht sich das insgesamt dann leichter.
    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!
    Moin moin

    Die von Dir eingekreisten Symbole kennzeichnen MDI Fenster. frmMDI ist dabei das Hauptfenster. Jau, Zeilen mit einem Doppelpunkt am Ende sind Sprungmarken die man per GoTo direkt anspringt. GoTo ist auch etwas, was man immer versuchen sollte nicht zu verwenden. Ausnahme: zur Fehlerbehandlung in Verbindung mit On Error GoTo... Form_Load wird immer aufgerufen wenn die Form geladen wird. Das ist selbst in .NET so.
    Mfg -Franky-

    -Franky- schrieb:

    Ausnahme: zur Fehlerbehandlung in Verbindung mit On Error GoTo.
    Das gehört ganz raus.
    @Haudruferzappeltnoch
    Allerdings ist die Fehlerbehandlung unter VB6 anders als in .NET.
    Lasse den Code zunächst so wie er ist, und wenn Du ansonsten durch bist, stellst Du die Fehlerbehandlung um.
    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!
    Ich würde die GoTos einfach erstmal generell als Methodenaufruf neu einbauen. Bei GoTo Error nehme ich einfach erstmal Try Catch

    Also aus

    Visual Basic-Quellcode

    1. Sub iwas()
    2. GoTo resumeEti
    3. ....
    4. resumeEti:
    5. ...
    6. End Sub


    mache ich

    VB.NET-Quellcode

    1. Sub iwas()
    2. resumeEti(hier müssen theoretisch alle variablen übergeben werden die oben in beiden codeabschnitten geteilt werden)
    3. ...
    4. End Sub
    5. Private Sub resumeEti(variablen as List(Of Hilfsklasse))
    6. ...
    7. End Sub

    Haudruferzappeltnoch schrieb:

    mache ich
    Wenn Du dazu eine qualifizierte Antwort haben willst, solltest Du mal die ganze Methode posten.
    Wenn Du On Error sorgfältig durch Try Catch ersetzt sollte das ganze bereits laufen.
    Du solltest Dich in diesem Stadium um die korrekten Ergebnisse kümmern, noch nicht um VB6-Altlasten.
    Die kommen zuletzt dran, indem Du den Generalimport vom VisualBasic-Namespace rauswirfst.
    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!
    Gibt es, aber tu es nicht. Jedes mir bisher aufgetretende GoTo hat sich bisher immer als umgehbar herausgestellt. Dass GoTo nie eine gute Idee ist, wurde schon vor ca. 55 Jahren publiziert.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Klar ausbessern ist ja drin. Nur damit ich verstehe was RdF meinte. Ich dachte Springen kann man in .NET garnicht mehr deswegen die Verwirrung

    Zu den MDI Fenstern. Ich habe hier im Load des Hauptfensters eine Sub die den WindowState des Unterfensters ändert. Heißt das das Unterfenster wurde direkt mit dem Hauptfenster mit geladen? Ich habe für das Unterfenster kein .Show und es hat selbst auch keine Load-Sub.

    Visual Basic-Quellcode

    1. Private Sub MDIForm_Load() ''''Ist das Hauptfenster
    2. ArBPlatz = 1
    3. intervall1 = 1
    4. If intervall1 = 0 Then intervall1 = 1
    5. zeitVorgabe = zeitVorLastEntry
    6. frmMDI.lbvonAV = "inaktiv"
    7. frmMDI.LbTimer1 = intervall1
    8. 'Kindfenster anzeigen
    9. Select Case ArBPlatz
    10. Case 1
    11. MNU_Local.Enabled = True
    12. MNU_Local_Click
    13. Exit Sub
    14. End Select
    15. End Sub
    16. Private Sub MNU_Local_Click()
    17. ArBPlatz = 1
    18. Abteilung = "Local"
    19. 'startSQL = "SELECT * FROM LAUF"
    20. frmLaufAnwahl.WindowState = 2 '''''ist das Unterfenster
    21. End Sub

    Haudruferzappeltnoch schrieb:

    Nur damit ich verstehe was RdF meinte
    GoTo funktioniert, hab ich extra getestet.
    Wenn Du einen Stand erreicht hast, wo das Programm läuft, sorge Dich zuerst um die korrekten Ergebnisse.
    Wenn die Ergebnisse korrekt sind, kannst Du die GoTos entfernen.
    In dieser Reihenfolge!
    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!