.
Anmeldung | Registrieren | Hilfe
in Suchen

Problem beim ausführen einer Sub in anderem Formular

Letzter Beitrag 31. Mai 2010 9:27 von juetho. 4 Antworten.
Seite 1 von 1 (5 Treffer)
Beiträge sortieren: Zurück Weiter
  • 29. Mai 2010 18:05

    • Bernd
    • Top 25 Mitwirkender
      Männlich
    • Registriert am 10. Jan 2009
    • Weißbach
    • Beiträge 108
    • Punkte 1.440

    Problem beim ausführen einer Sub in anderem Formular

    Hallo Leute,

    brauche mal wieder Euren Rat, sicher ist das Problem recht einfach zu lösen, ich sehe aber die Lösung nicht!


    Folgendes:

    Ich programmiere gerade an einer kleinen Datenbankanwendung. Mein Programm greift auf eine MSSQL-DB zu. Soweit noch kein Problem!

    Ich möchte beim schließen des einen Formulars (Eingabe einer Nummer, welche dann sofort in einer Variablen gespeichert wird), eine Sub des anderen Formulars ausführen.

    Dies funktioniert auch und die Sub wird sauber durchlaufen.

    Nur werden die Daten, die die Sub aus der DB holt einfach nicht angezeigt!

    Führe ich die Sub per Hand aus (über einen Button) werden auch die Daten angezeigt. Dies muss also irgendwas mit dem Focus des Formulars oder so ähnlich zu tun haben.

    Könnt Ihr mir bitte den richtigen Wink geben?

    Hier der Aufruf aus der "Eingabe Form":

    If txtanrufid.Text = "" Then
                MsgBox("Bitte geben Sie eine Zahl ein", MsgBoxStyle.Information, "Falsche Eingabe")
                txtanrufid.Text = ""
            Else
                If IsNumeric(txtanrufid.Text) Then
                    anrufid = txtanrufid.Text
                    Close()
                    Form1.Anruf_laden(anrufid)
                Else
                    MsgBox("Bitte geben Sie eine gültige Zahl ein", MsgBoxStyle.Information, "Falsche Eingabe")
                    txtanrufid.Text = ""
                    txtanrufid.Focus()
                End If
            End If

    ..bin blutiger Anfänger, will mich aber bessern, nicht zuletzt mit Eurer Hilfe.. ;o)
    Sprache: VB.NET 2008
    Nachtrag: Das Programmieren macht mir mehr und mehr Spaß! Auch dank Euch..
    Nachtrag 2: Ich bin froh, Teil dieser Community sein zu dürfen. Ihr seid klasse..!!!!
    • IP-Adresse ist Registriert
  • 30. Mai 2010 11:14 Antwort zu

    • juetho
    • Top 100 Mitwirkender
      Männlich
    • Registriert am 29. Sep 2009
    • Beiträge 17
    • Punkte 235

    Problem beim Ausführen einer Sub in anderem Formular

    Hallo Bernd,

    dein erster Fehler besteht darin, dass du unter Form1.Anruf_laden anscheinend die Klasse Form1 benutzt. Du benötigst aber eine bestimmte Instanz, nämlich das konkret vorhandene Formular. Dein zweiter Fehler besteht darin, dass du die Abhängigkeiten nicht beachtest: Vermutlich wurde das Eingabe-Formular vom Hauptformular (Form1-Instanz) aufgerufen; also musst du sicherstellen, dass wirklich dessen Methode Anruf_laden benutzt wird. Dazu gibt es zwei Möglichkeiten:

    1. Eingabe-Formular wird mit ShowModal aufgerufen (einfache und vernünftige Lösung, passt aber nicht immer), die Rückgabe des Wertes erfolgt über eine Nur-Lesen-Eigenschaft dieses Formulars:
    Using(secondForm As EingabeFormular = New EingabeFormular() )
    Begin
       secondForm.ShowModal()
       Dim result As Integer = secondForm.ResultValue
    End Using

    Achtung: Pseudo-Code. ResultValue wird in deinem Code vor dem Close zugewiesen.

    2. Über einen Delegate (sauberes, aber etwas kompliziertes Vorgehen): Es wird ein Delegate erzeugt mit den Argumenten, die Anruf_laden benötigt. Im EingabeFormular wird eine Variable vom Typ dieses Delegate deklariert. Nach dem Erzeugen des Formulars übergibt das Hauptformular die "Adresse" von Anruf_laden an das EingabeFormular (z.B. über eine Methode SetAnrufLaden), dort wird dieser Wert der Delegate-Variable zugewiesen. Dann kannst du sie direkt aufrufen. Pseudo-Code im Hauptformular:
    secondForm As EingabeFormular = New EingabeFormular()
    secondForm.SetAnrufLaden(Anruf_Laden)
    secondForm.Show()

    Pseudo-Code im Eingabeformular:
    Dim anrufLaden As MySimpleDelegate
    Sub SetAnrufLaden(value As MySimpleDelegate)
      anrufLaden = value
    End Sub
    ' und später
    anrufid = txtanrufid.Text
    anrufLaden(anrufid)
    Close()

    Auf jeden Fall musst du darauf achten, dass alles Wichtige vor dem Close auszuführen ist.

    Gruß Jürgen
    Jürgen Thomas
    • IP-Adresse ist Registriert
  • 30. Mai 2010 15:00 Antwort zu

    • Bernd
    • Top 25 Mitwirkender
      Männlich
    • Registriert am 10. Jan 2009
    • Weißbach
    • Beiträge 108
    • Punkte 1.440

    Problem beim Ausführen einer Sub in anderem Formular

    Hallo Jürgen,

    erst mal danke für Deine ausführliche Doku. Leider komm' ich damit nicht wirklich klar, da es einige Dinge unter VB.NET nicht zu geben scheint, wie z.B. "Begin", "Using" und MySimpleDelegate.

    Ich rufe das Eingabeformular natürlich aus einem Formular auf:

     
    
    
    Private Sub btnneuerdatensatz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnneuerdatensatz.Click
    
    
          If speichernntig < 1 Then
    
    
                Dim fenster As frmKDsucheHotl = New frmKDsucheHotl()
    
    
                fenster.MdiParent = frmHaupt
    
    
                fenster.Show()
    
    
          Else
    
    
                If MsgBox("Sie haben Ihre Eingaben noch nicht gespeichert!" & vbCrLf & vbCrLf & _
    
    
                               "Wollen Sie alle nderungen verwerfen?", MsgBoxStyle.OkCancel, "nderungen nicht gespeichert!") _
    
    
                = MsgBoxResult.Ok Then
    
    
                 speichernntig = 0
    
    
                  btnneuerdatensatz_Click(sender, e)
    
    
                Else
    
    
                   Exit Sub
    
    
                End If
    
    
    End If
    
    
    End Sub

    Das Aufrufende Fenster bleibt dabei offen.

    Das Eingabefenster, holt sich nun über einen SQL-String Daten aus der DB und zeigt diese in einem Grid an. Im Grid werden die ausgewählten Zeilen ausgewählt und die "anrufid" wird der entsprechenden Variablen zugewiesen.

    Wenn ich es richtig verstanden habe, muss ich die Sub "Anruf_laden(anrufid)" in der richtigen Instanz des aufrufenden Fensters aufrufen.

    Das ist mein Problem, damit komm' ich nicht klar. Kannst Du mir noch einmal helfen, bitte. Hilfreich währe sicher auch ein Literaturlink zu solchem "Fensterhandling".

    Danke Dir für Deine Mühe.

    Bernd

     

    ..bin blutiger Anfänger, will mich aber bessern, nicht zuletzt mit Eurer Hilfe.. ;o)
    Sprache: VB.NET 2008
    Nachtrag: Das Programmieren macht mir mehr und mehr Spaß! Auch dank Euch..
    Nachtrag 2: Ich bin froh, Teil dieser Community sein zu dürfen. Ihr seid klasse..!!!!
    • IP-Adresse ist Registriert
  • 30. Mai 2010 17:20 Antwort zu

    • Bernd
    • Top 25 Mitwirkender
      Männlich
    • Registriert am 10. Jan 2009
    • Weißbach
    • Beiträge 108
    • Punkte 1.440

    Problem beim Ausführen einer Sub in anderem Formular

    Antworten

    Hallo Ihr alle,

    habe es nun selbst gelöst! Eigentlich ist es ganz einfach ;o)

    In der ersten Form wird per "AddHandler Form2.FormClosed, AddressOf OnForm2Closed" das Form2.Closed Event behandelt. Nun muss nur noch in der entsprechenden Sub "OnForm2Closed" der passende Code ausgeführt werden.

    Beispiel:

    Public Sub suchen_oeffnen()
    
    
    Dim fenster As Form2
    
    
    fenster = New Form2
    
    
    fenster.MdiParent = frmHaupt
    
    
    fenster.Show()
    
    
    AddHandler fenster.FormClosed, AddressOf OnfrmKDsucheHotlClosed
    
    
    End Sub

    Und hier die Sub:

    Public Sub OnfrmKDsucheHotlClosed(ByVal sender As Object, ByVal e As FormClosedEventArgs)
    
    
    Kundendaten_laden()
    
    
    RemoveHandler Form2.FormClosed, AddressOf OnfrmKDsucheHotlClosed

    Gruß vom Bernd

    ..bin blutiger Anfänger, will mich aber bessern, nicht zuletzt mit Eurer Hilfe.. ;o)
    Sprache: VB.NET 2008
    Nachtrag: Das Programmieren macht mir mehr und mehr Spaß! Auch dank Euch..
    Nachtrag 2: Ich bin froh, Teil dieser Community sein zu dürfen. Ihr seid klasse..!!!!
    • IP-Adresse ist Registriert
  • 31. Mai 2010 9:27 Antwort zu

    • juetho
    • Top 100 Mitwirkender
      Männlich
    • Registriert am 29. Sep 2009
    • Beiträge 17
    • Punkte 235

    Problem beim Ausführen einer Sub in anderem Formular

    Hallo Bernd,

    ich arbeite mit C# und habe äußerst wenig Ahnung von VB, deshalb kann ich deinen Code nicht beurteilen. Es sieht so aus, als wenn du meine Delegate-Lösung in die Ereignisbehandlung eingebaut hättest; und das ist ein vernünftiges Verfahren.

    Deshalb nur noch kurz zur Erläuterung (und zum späteren besseren Verständnis): Ich hatte meine Code-Schnipsel ausdrücklich als Pseudo-Code bezeichnet. "MySimpleDelegate" wurde als Klassenname verwendet, steht also als Beispiel für den einfachen (= simple) Delegate, der selbst (= my) definiert werden sollte.

    Jürgen
    Jürgen Thomas
    • IP-Adresse ist Registriert
Seite 1 von 1 (5 Treffer)

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum