Code von einem anderen Sub ausführen

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von dejanstar.

    Code von einem anderen Sub ausführen

    Hallo

    Folgendes Problem:
    Ich möchte in eine andere Sub springen, ausführen und dann weiter im Code fortfahren.

    Hier mein Code:

    VB.NET-Quellcode

    1. Private Sub DayView1_ResolveAppointments(sender As Object, args As ResolveAppointmentsEventArgs) Handles DayView1.ResolveAppointments
    2. Dim m_Apps As New List(Of Appointment)()
    3. For Each m_App As Appointment In m_Appointments
    4. If (m_App.StartDate >= args.StartDate) AndAlso (m_App.StartDate <= args.EndDate) Then
    5. m_Apps.Add(m_App)
    6. End If
    7. Next
    8. args.Appointments = m_Apps
    9. End Sub
    10. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    11. ' Anzeige füllen
    12. Dim con As New OleDbConnection
    13. Dim cmd As New OleDbCommand
    14. Dim reader As OleDbDataReader
    15. Dim Pfad As String
    16. Dim m_App As New Appointment()
    17. Dim DStart As New Date(2015, 5, 19, 8, 30, 0)
    18. Dim DEnd As New Date(2015, 5, 19, 12, 30, 0)
    19. Pfad = Path.GetDirectoryName(Application.ExecutablePath) + "\Datenbank.mdb"
    20. con.ConnectionString =
    21. "Provider=Microsoft.Jet.OLEDB.4.0;" &
    22. "Data Source='" & Pfad & "'"
    23. cmd.Connection = con
    24. cmd.CommandText = "select * from Aufträge where Monteur1 = '" & ListBox1.SelectedItem & "'"
    25. Try
    26. con.Open()
    27. reader = cmd.ExecuteReader
    28. Do While reader.Read()
    29. m_App.StartDate = (
    30. reader("DatumTermin"))
    31. m_App.EndDate = (
    32. reader("End"))
    33. m_Appointments.Add(m_App)
    34. DayView1.Invalidate()
    35. ' Hier sollte der Code von "Private Sub DayView1_ResolveAppointments" ausgeführt werden
    36. Loop
    37. reader.Close()
    38. con.Close()
    39. Catch ex As Exception
    40. MessageBox.Show(ex.Message)
    41. End Try
    42. End Sub


    VB.NET-Quellcode

    1. DayView1_ResolveAppointments(sender, e)

    Dieser Code funktioniert z.B. bei Button_click, aber hier nicht.

    Freundliche Grüsse
    Dejan
    Du willst sender und e von ListBox1_SelectedIndexChanged mitgeben. Ersten wäre das unterschiedliche Objekte und zweitens auch unterschiedliche EventArgs(ResolveAppointmentsEventArgs <> EventArgs), wobei das letztere enscheidend sein dürfte. Da du weder auf sender noch auf args in DayView1_ResolveAppointments zurückgreifst, reicht das so aus.

    VB.NET-Quellcode

    1. DayView1_ResolveAppointments(Nothing, Nothing)

    Ich verstehe das Problem nicht:

    dejanstar schrieb:

    Ich möchte in eine andere Sub springen, ausführen und dann weiter im Code fortfahren.


    VB.NET-Quellcode

    1. Private Sub Test()
    2. 'mach irgendwas
    3. AndereSub()
    4. 'fortfahren
    5. End Sub
    6. Private Sub AndereSub()
    7. 'mach irgendwas
    8. End Sub
    Was das mit dem Code in Post#1 zu tun haben soll ist mir unerfindlich.

    Ebenso unerfindlich:

    dejanstar schrieb:

    Dieser Code funktioniert z.B. bei Button_click, aber hier nicht.
    Welche Button_click, und was ist mit "hier" gemeint?

    dejanstar schrieb:

    Dieser Code funktioniert z.B. bei Button_click, aber hier nicht.
    Bei Eventhandlern hat das Event-Argument diverse Typen, bei Dir wäre es ResolveAppointmentsEventArgs.
    Dies must Du Dir zunächst erstellen:

    VB.NET-Quellcode

    1. Dim e As New ResolveAppointmentsEventArgs() ' ggf. Parameter setzen
    2. ' Properties von e belegen
    3. DayView1_ResolveAppointments(sender, e)
    oder mot dem Code von @Murdock einfach nix übergeben. Das knallt allerdings, wenn Du die Event-Argumente auswertest.
    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!
    Is klar, das e schon da ist, kommt ja als EventsArgs der ListView rein. Benenne das anders.

    VB.NET-Quellcode

    1. Dim other_e As New ResolveAppointmentsEventArgs()
    2. 'other_e.xyz=...
    3. DayView1_ResolveAppointments(DirectCast(DayView1, Object), other_e)

    dejanstar schrieb:

    Was mache ich falsch?
    Poste mal den kompletten Code der betreffenden Routine.
    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!
    Also der Code von @Murdock würde so funktionieren, Danke. Aber ich habe so wie es aussieht ein anderes Problem.

    Ich probiere es mal zu erklären was ich will.

    Der ursprüngliche Code sah so aus (Ein kleiner Test von mir um zu schauen ob der Code funktioniert):

    Ich habe ein Button, und wenn ich auf dem klicke zeigt mir eine Control die DayView1 heist, sieht so aus wie der Outlook Kalender, den Termin.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim DStart As New Date(2015, 5, 18, 8, 30, 0)
    3. Dim DEnd As New Date(2015, 5, 18, 12, 30, 0)
    4. Dim m_App As New Appointment()
    5. m_App.StartDate = DStart
    6. m_App.EndDate = DEnd
    7. m_App.BorderColor = Color.Red
    8. m_Appointments.Add(m_App)
    9. DayView1.Invalidate()
    10. End Sub
    11. Private Sub DayView1_ResolveAppointments(sender As Object, args As ResolveAppointmentsEventArgs) Handles DayView1.ResolveAppointments
    12. Dim m_Apps As New List(Of Appointment)()
    13. For Each m_App As Appointment In m_Appointments
    14. If (m_App.StartDate >= args.StartDate) AndAlso (m_App.StartDate <= args.EndDate) Then
    15. m_Apps.Add(m_App)
    16. End If
    17. Next
    18. args.Appointments = m_Apps
    19. End Sub



    Nun will ich von einer Datenbank alle vorhandenen Datensätze in der DayView1 Control anzeigen, und habe es mit diesem Code probiert:

    VB.NET-Quellcode

    1. ​Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
    2. ' Anzeige füllen
    3. Dim con As New OleDbConnection
    4. Dim cmd As New OleDbCommand
    5. Dim reader As OleDbDataReader
    6. Dim Pfad As String
    7. Dim m_App As New Appointment()
    8. Pfad = Path.GetDirectoryName(Application.ExecutablePath) + "\Datenbank.mdb"
    9. con.ConnectionString =
    10. "Provider=Microsoft.Jet.OLEDB.4.0;" &
    11. "Data Source='" & Pfad & "'"
    12. cmd.Connection = con
    13. cmd.CommandText = "select * from Aufträge where Monteur1 = '" & ListBox1.SelectedItem & "'"
    14. Try
    15. con.Open()
    16. reader = cmd.ExecuteReader
    17. Do While reader.Read()
    18. m_App.StartDate = (
    19. reader("DatumTermin"))
    20. m_App.EndDate = (
    21. reader("End"))
    22. m_Appointments.Add(m_App)
    23. DayView1.Invalidate()
    24. Loop
    25. reader.Close()
    26. con.Close()
    27. Catch ex As Exception
    28. MessageBox.Show(ex.Message)
    29. End Try
    30. End Sub


    jetzt halt nicht durch drücken eines Buttons sondern durch eine Auswahl in der Listbox1.

    Das Problem ist dass nur der letzte Eintag von der Datenbank angezeigt wird.

    dejanstar schrieb:

    VB.NET-Quellcode

    1. DayView1.Invalidate()
    Was ganz genau passiert mit DayView1?
    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!

    dejanstar schrieb:

    ändert nichts an der Sache.
    Klar.
    Was genau ändert sich an den Inhalten dieser Instanz?
    Da wird nix zugewiesen. :/
    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!