Announcement

Collapse
No announcement yet.

Zugriff auf Variable einer andere Form

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

  • Zugriff auf Variable einer andere Form

    Hallo Zusammen,

    folgender Fall: Mein VB-Projekt besteht aus 3 Formularen (Form1, Form2, Form3).
    Form3 und Form2 werden als neu erzeugtes Form aufgerufen, sprich mit:

    Code:
    Dim F3 as New Form3
    F3.ShowDialog
    Im Formular2 befindet sich eine Variable TEST, die als Public deklariert ist.

    Wie greife ich in Form3 auf die Variable zu?
    Geht das über Form3.Test oder dann über die instanziierte Variante mit F3.Test?

    Gruß und Danke
    Gogat

  • #2
    Hallo.

    Ein Versuch: Private Shared TEST As Integer
    Ansonsten: http://www.galileocomputing.de/openbook/visual_basic/

    Gruss
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Ich persönlich bevorzuge den Weg über Properties...
      Ein Beispiel:
      Code:
      Public Class Form2
      
        Private lVar1 As Integer
        Private lVar2 As String
        Private lVar3 As Object
      
        Public Property Var1() As Integer
          Get
            Return lVar1
          End Get
          Set(ByVal value As Integer)
            lVar1 = value
          End Set
        End Property
      
        Public WriteOnly Property Var2() As String
          Set(ByVal value As String)
            lVar2 = value
          End Set
        End Property
      
        Public ReadOnly Property Var3() As Object
          Get
            Return lVar3
          End Get
        End Property
      
      End Class
      ...von deiner aufrufenden Form kannst Du nun auf diese Properties zugreifen
      Code:
        Private Sub Form1_Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          Dim rVar1 As Integer
          'Dim rVar2 As String <- brauchen wir nicht (s.u.)
          Dim rVar3 As Object
          Dim MyForm2 As New Form2
      
          MyForm2.Var1 = 1
          MyForm2.Var2 = "Test"
          'MyForm2.Var3 = New Object <- geht natürlich nicht weil als readonly deklariert!
      
          If MyForm2.ShowDialog = Windows.Forms.DialogResult.OK Then
            rVar1 = MyForm2.Var1
            'rVar2 = MyForm2.Var2 <- geht natürlich nicht weil als writeonly deklariert!
            rVar3 = MyForm2.Var3
          End If
        End Sub
      In Form2 kannst Du die lokalen Variablen (lVar1, lVar2, lVar3...) beliebig ändern, den Rest erledigst Du über die Properties. Das schöne daran ist sie als Methoden gekapselt sind und so nur spezifischen Zugriff gestatten!

      --------------------------------------------------------------------------------

      siehe dazu auch dieser alte Thread von 2004
      Zuletzt editiert von Nico Stöckigt; 27.10.2007, 14:26.

      Comment


      • #4
        für Variablen ist es mir schon klar. Die deklariere ich dann einfach dementsprechend, aber wenn ich z.B. auf Werte eines DataGridViews von Form2 zugreifen möchte, dann steh ich momentan noch vor einem Rätsel...

        Comment


        • #5
          form2.datagridview ...?
          Man muss schon eine ganze Menge wissen, um zu erkennen dass man nichts weiss.

          Comment


          • #6
            Du kannst zum einen das View als Referenz übergeben, so das Du direkt am Object "operieren" kannst, zum anderen kannst Du Dir in einem Property - was ja als Methode (Funktion) zu sehen ist - beliebig die gewünschten Member veröffentlichen.
            Code:
            Public Class Form2
            
            ...
            
              Public ReadOnly Property DataView() As System.Data.DataView
                Get
                  Return Me.MyDataView
                End Get
              End Property
            
              Public Property Table() As System.Data.DataTable
                Get
                  Return Me.MyDataView.Table
                End Get
                Set(ByVal value As System.Data.DataTable)
                  Me.MyDataView.Table = value
                End Set
              End Property
            
              Public Property AllowNew() As Boolean
                Get
                  Return Me.MyDataView.AllowNew
                End Get
                Set (value As Boolean)
                  Me.MyDataView.AllowNew = value
                end Set
              End Property
            
            End Class
            Mit etwas Kreativität fallen mir da die abstrusesten Möglichkeiten ein. Du kannst Dir von mir aus auch eine eigene Klasse schreiben die genau die Methoden beinhaltet die du benötigst und kannst davon dann ein instanziertes Object mit deinem Form-Object verbinden und über ein shared variable oder eben über ein property veröffentlichen.
            Code:
            class DataViewAllows
              public AllowDelete As Boolean
              public AllowEdit As Boolean
              public AllowNew As Boolean
            end class
            
            ...
            
            Public Class Form2
            
            ...
            
              Public Property ViewAllows() As DataViewAllows
                Get
                  Dim tDataViewAllows As new DataViewAllows
            
                  tDataViewAllows.AllowDelete = Me.MyDataView.AllowDelete 
                  tDataViewAllows.AllowEdit = Me.MyDataView.AllowEdit
                  tDataViewAllows.AllowNew = Me.MyDataView.AllowNew
            
                  Return tDataViewAllows
                End Get
                Set(ByVal value As System.Data.DataTable)
                  Me.MyDataView.AllowDelete  = value.AllowDelete
                  Me.MyDataView.AllowEdit = value.AllowEdit
                  Me.MyDataView.AllowNew = value.AllowNew
                End Set
              End Property
            
            End Class
            Zuletzt editiert von Nico Stöckigt; 02.11.2007, 01:24.

            Comment


            • #7
              ok, versuch ich auch mal.

              Mal ne andere grundlegende Frage:

              Wenn ich jetzt mit einem Button in Formular1 ein Form2 aufrufe, deklariere ich dann das Form2 direkt unter dem Button, sprich "Dim F2 as New Form2()" oder kann ich das auch unter den allgemeine Deklarationen machen? Wenn ich die letzte Möglichkeit verwende und dann auch noch als Public, dann kann ich doch ansich in jeder anderen Form auf die instanziierte Form2 zugreifen, oder ist das eher etwas unschön?

              Comment


              • #8
                Ich darf dich - wenn auch suuuper verspätet - zitieren:
                ...das ist eher etwas unschön
                zumindest das Erstellen des Objects sollte an der Stelle geschehen an der es auch verwendet wird. Es gibt natürlich immer Ausnahmen wo man ein Object (oder auch eine Form) global benötigt und auch immer wieder die gleiche Instanz verwenden muß... dann erstellt man das Object/Form natürlich an exponierter Stelle (.OnLoad) und greift im Bedarfsfall darauf zu - bei einer Form kann man diese dann immer bei Nichtbenutzung verbergen... aber das sind Ausnahmefälle!!!

                Comment

                Working...
                X