Announcement

Collapse
No announcement yet.

einer Form Parameter übergeben, geht das?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • einer Form Parameter übergeben, geht das?

    Hallo,

    vorab: ich kenne mich mit diesen Dingen noch nicht so furchtbar gut aus, aber man will ja lernen.
    Ich habe ein Projekt vor mit mehreren, sagen wir, Modulen. Diese sollen, mehr oder weniger, in separaten Formularen abgehandelt werden. Diese Formulare allerdings sollen von verschiedenen Stellen aus aufgerufen werden.
    Idealerweise stelle ich mir das dann so vor, dass man eine Funktion oder Prozedur oder Klasse oder was weiß ich in einer Zeile aufruft, versehen quasi mit einem Parameter (z.B. einer Kundennummer). Ich brauche mich dann von der aufrufenden Stelle aus um nichts weiter zu kümmern, die Form lädt automatisch den Kunden und alles weitere passiert dann in dieser Form.
    Bisher muss ich die Form aufmachen und danach dort eine globale Funktion aufrufen, die mir den Kunden holt und anschließend anzeigt. Ist nicht wirklich elegant und optimal, fürchte ich. Mit einer Property der Form-Klasse komme ich, denke ich, auch nicht weiter, weil ich die auch erst wieder nach dem Aufruf der Form befüllen kann. An sich würde es mir schon helfen, der Form-Klasse einen Parameter übergeben zu können, der dann im OnLoad ausgewertet werden könnte.
    Wie bewerkstellige ich sowas? Ich danke Euch für Eure Tipps...

    Dave

  • #2
    Hallo Dave,

    Du koenntest dir in der Form zB einen zweiten Konstruktor bauen, welcher als Parameter deine Kundennummer erwartet.
    Wenn du die Form dann aufrufst, verwendest du einfach diesen Konstruktor, wie zB:

    Dim frm as KundenForm = new KundenForm(kdnr)
    frm.Show()

    HTH
    *-- robert.oh. --*

    Comment


    • #3
      Ja, genau, sowas schwebt mir vor. Kannst Du mir vielleicht auch noch exemplarisch zeigen, wie bzw. mit welchen Schlüsselworten der Konstruktor überschrieben wird? Habe ich noch nie gemacht. Wäre wirklich nett.

      Comment


      • #4
        Definition der beiden Konstruktoren auf der Form:

        Code:
        Public Class TestForm
            Public Sub New()
                InitializeComponent()
            End Sub
        
            Public Sub New(ByVal caption As String)
                InitializeComponent()
                ' gewuenschte Operation mit dem Parameter durchfuehren
                Me.Text = caption
            End Sub
        End Class
        Aufruf dieser Form, mit und ohne Parameter
        Code:
            Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                Dim frm As TestForm = New TestForm("Hallo")
                frm.Show()
            End Sub
        
            Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
                Dim frm As TestForm = New TestForm()
                frm.Show()
            End Sub
        HTH
        *-- robert.oh. --*

        Comment


        • #5
          Ahh, vielen Dank, Robert. Das zum Beispiel war mir auch nicht klar, dass man, wenn man den Konstruktor überschreibt, dann auch den originalen mit reinnehmen muss. Denn den SUB New() ist ja bei einer Klasse, die man in der Hinsicht nicht anfasst, auch nicht notwendig zu implementieren.
          Vielen Dank, hast mir wirklich geholfen...ich probiere es mal aus.

          Dave

          Comment


          • #6
            Ob das Anfuehren von 'InitializeComponents()' im zweiten Konstruktor irgendwie umgangenen werden koennte weiss ich leider nicht, da ich meistens mit C# programmiere.

            In C# ist es zB so, dass ich mich auf einen Konstruktor beziehen kann, das schaut da in etwa so aus:

            Code:
            // erster / basis-konstruktor
            public void Form1()
            { ... }
            
            // zweiter konstruktor, der sich auf den ersten (: this()) bezieht
            public void Form1(string caption) : this()
            { ...}
            Ob das in VB auch moeglich ist, weiss ich aber leider nicht - Hauptsache es funktioniert ;-)
            *-- robert.oh. --*

            Comment


            • #7
              Nee, was ich meinte und was mich gewundert hat, ist, dass Du den orginalen, normalen Konstruktor mit reingenommen hast, der ja nicht in den Code geschrieben werden muss, wenn nicht auch ein alternativer Konstruktor erstellt wird.

              Habe es gerade mal ausprobiert, funktioniert prima. Wenn ich den normalen, "leeren" Konstruktor nicht mit reinnehme, dann wird dieser auch nicht mehr zur Verfügung gestellt, dann geht's nur noch mit Parameter. Ansonsten habe ich eben die Wahl. Und wenn ich in den alternativen parametrisierten Konstruktor zum Schluß noch ein Me.Show() reinnehme, dann brauche ich tatsächlich nur noch eine einzige Zeile zum Aufruf des Formulars. Perfekt.
              Vielen Dank, Robert! Danke.

              Dave

              Comment

              Working...
              X