Announcement

Collapse
No announcement yet.

Variable an zweites Formular übergeben

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

  • Variable an zweites Formular übergeben

    Hallo zusammen

    ich fange nach längerer Zeit gerade wieder das Programmieren an, und habe nun diverse Probleme.

    Ich hoffe (bin mir sicher) das mir hier jemand helfen kann.

    Ich lese über einen OpenFileDialog in eine Variable (stream) eine Datei ein. Nun muss ich in einem zweiten Formular auf die Daten der Datei (Variable) zugreifen. Leider sagt mir VisualStudio2008 immer "die Variable ist nicht definiert).

    Wie bekomme ich sie von dem Formular 1 zum Formular 2 ????

    Gruss und besten Dank im vorraus
    stocki

  • #2
    Einfach mit Form2.Variablenname

    MfG lurch

    Comment


    • #3
      Das klingt ganz nach C++-Builder. Dort war (ich weiss nicht mehr obs immer noch so ist) es so, dass bestimmte Forms immer als globale Variablen bei Programmstart angelegt wurden.

      In VB.NET ist das etwas anders. Die Forms werden nicht als globale/static Objekte behandelt, sondern ganz normal. Die einfachste Möglichkeit ist wohl dem Konstruktur von Form2 eine Referenz auf Form1 zu übergeben und diese in Form2 zu speichern.

      Code:
      public class Form2: Form
      {
        private Form1 form1;
      
        public Form2(Form1 form1)
        {
          this.form1 = form1;
        }
      
        public void MachWasInForm1()
        {
          form1.TuWas();
        }
      }
      Natürlich gibts auch noch andere Wege so etwas zu lösen, aber das hängt dann von der Aufgabenstellung ab. Die Lösung oben ist quick and dirty *g*

      Comment


      • #4
        Diese Lösung ist very dirty! Das abhängige Formular sollte nichts über das übergeordnete Formular wissen. Aber du kannst die Datei auf ähnliche Weise (über eine Set-Methode oder sogar Eigenschaft) von Form1 an Form2 übergeben:
        Code:
        public class Form2: Form
        {
          private string filecontent;
        
          public void SetFileContent(string content)
          {
            filecontent = content;
          }
        }
        Ihr seht, das ist die Schreibweise von C#, aber in VB.NET geht es analog. In diesem Beispiel setze ich eine Textdatei voraus, deren Inhalt komplett in einen String eingelesen wurde. Bei einem Stream ist es komplizierter, weil er irgendwann geschlossen werden muss - wer macht das dann?

        Alternativ könntest du doch auch den Dateinamen übergeben und das Einlesen in Form2 erledigen.

        Gruß Jürgen

        Comment


        • #5
          Naja... wie gesagt, das ist alles sehr abhängig vom jeweiligen Projekt. Im Prinzip könnte man sich auch Datenobjekte basteln, die dann wieder der Oberfläche bescheid geben wenn sich was ändert - MVP oder sowas... allerdings wollte ich den Threadersteller nicht gleich mit sowas plattwalzen *g*

          Comment


          • #6
            Wenn Form 2 geöffnet wird, nachdem die Datei ausgelesen wurde, dann ist es glaube ich das einfachste, diesen Parameter in den Konstruktor zu stecken.
            [highlight=vbnet]

            Public class Form2

            Public Sub New(ByVal InfoAusDatei As String)
            InitializeComponent()
            Me.TextBox1.Text = InfoAusDatei
            End Sub

            ....
            End class

            Public class Form1
            ...
            Private Sub mySub()
            Dim x As New OpenFileDialog()
            If x.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
            Dim Info As String
            'Datei auslesen und in Info stecken
            Dim frm As New Form2(Info)
            frm.ShowDialog(Me)
            End If
            ...
            End Sub
            ...
            End class
            [/highlight]

            Ansonsten kannst Du ein Property in Form2 deklarieren, das nach dem Einlesen der Datei beschrieben wird und entsprechende Aktualisierungen anstößt.

            [highlight=vbnet]

            Public class Form2
            ...
            Public WriteOnly Property InfoAusDatei() As String
            Set(ByVal value As String)
            Me.TextBox1.Text = value
            Application.DoEvents() 'zum Aktualisieren der Ansicht
            End Set
            End Property
            ...
            End class


            Public class Form1
            ...
            Private Sub mySub()
            Dim frm As New Form2()
            frm.Show(Me)
            ...
            Dim x As New OpenFileDialog()
            If x.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
            Dim Info As String
            'Datei auslesen und in Info stecken
            frm.InfoAusDatei = Info
            End If
            ...
            End Sub
            ...
            End class
            [/highlight]

            Ich gehe hier übrigens wie Jürgen davon aus, dass der Inhalt der Datei in einem String gespeichert an Form2 übergeben werden soll.

            Gruß und schönes Wochenende
            Martin

            Comment

            Working...
            X