vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2020
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Auf Werte in verschiedenen Instanzen eines Formulars zugreifen 
Autor: Novatlan
Datum: 24.06.20 16:29

Hallo!

Ich habe eine Anwendung, die ein Formular ("frmList") enthält, welches ein DataSet ("dsTable") hat.
Nun kann der Nutzer mehrere Instanzen dieses Formulars öffnen, in welchen das DataSet jeweils eine andere Datenquelle hat.
Innerhalb des Formulars werden andere Formulare per.ShowDialog geöffnet, welche jeweils auf das DataSet ihres Elternformulars zurückgreifen müssen. Und genau da hänge ich. Wenn ich (entweder per Getter/Setter oder auf das Public dsTable as DataSet (und ja, ich weiß, daß man das nicht macht, ich wollte es nur probieren da eben nichts funktioniert)) zugreife, z.b. dsTable.Rows..., dann "erreiche" ich nicht das DataSet des Elternformulars, sondern das DataSet der ursprünglichen Formular-Klasse. Und das ist natürlich leer.

Daher die Frage: Wie greife ich auf Variablen/Controls/etc einer bestimmten Instanz eines Formulars zu?
Ich suche nun schon den ganzen Tag und finde nichts...

beste Grüße!

Novatlan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Auf Werte in verschiedenen Instanzen eines Formulars zugreifen 
Autor: Manfred X
Datum: 24.06.20 19:08

Hallo!

Du solltest Deine Formulare explizit (z.B. in einem Stammformular) erstellen (New).
Dann kannst Du jeweils über die jeweils verwendete Zugriffsvariable (Referenz) auf die
Instanz bzw. auf Properties der Instanz zugreifen.
Ohne nähere Angaben zur Struktur Deines Programms kann man aber
nichts weiteres sagen.

WinForms-Beispiel
Public Class frmTestIt
 
    Dim _tbl As DataTable
    Public Property tbl As DataTable
        Set(value As DataTable)
            _tbl = value
            dgv.DataSource = _tbl
        End Set
        Get
            Return _tbl
        End Get
    End Property
 
 
    Dim dgv As New DataGridView With {.Parent = Me, .Top = 50}
    Dim subform, subform2 As frmTestIt
 
    Dim WithEvents btnSubForms As New Button With
        {.Parent = Me, .Text = "Subform"}
 
 
    Private Sub btnSubForms_Click(sender As Object, e As EventArgs) Handles _
      btnSubForms.Click
        subform = New frmTestIt
        With subform
            .tbl = New DataTable
            .tbl.Columns.Add("S1")
            .Location = Me.Location
            .Location.Offset(New Point(20, 20))
            .Show()
        End With
 
        subform2 = New frmTestIt
        With subform2
            .tbl = New DataTable
            .tbl.Columns.Add("S2")
            .Location = Me.Location
            .Location.Offset(New Point(40, 40))
            .Show()
        End With
 
    End Sub
 
    Private Sub frmTestIt_Load(sender As Object, e As EventArgs) Handles Me.Load
 
        Me.StartPosition = FormStartPosition.Manual
 
    End Sub
End Class


Beitrag wurde zuletzt am 24.06.20 um 19:12:16 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Auf Werte in verschiedenen Instanzen eines Formulars zugreifen 
Autor: Novatlan
Datum: 01.07.20 18:57

Hallo Manfred!
Vielen Dank und Entschuldigung für die späte Antwort; kam heute erst wieder dazu, mich mit dem Problem zu beschäftigen.
Ich glaube mein Problem ist anders gelagert.

Ich habe z.B. ein Form "frm_singleList"
Darin einen data table "dt_times".
Von diesem frm_singleList gibt es mehrere Instanzen, jeweils über
   Dim newList As New frm_singleList
 With newList
                .str_dataTableLocation = SaveFileDialog1.FileName
                .bln_makeNewList = True
            End With
            newList.Show()
angezeigt. Der DataTable wird dann jeweils in der im SaveFileDialog1 gewählten Datei gespeichert.

frm_singleList (bzw die verschiedenen Instanzen davon) rufen über Buttons mehrere weitere Formulare ab, in denen z.b. in Textboxen Daten eingegeben werden.
z.b. per
   Dim addTime As New frm_addTime()
        addTime.ShowDialog(Me)
Diese Daten müssen an die Instanz von frm_singleList zurück um beispielsweise in den DataTable Informationen einzufügen. Aber ich kann eben nicht
frm_singleList.dt_times.Rows.Add, etc...
machen, weil frm_singleList.dt_times ja der DataTable der Basisklasse des Formulars ist, nicht die "Version" von dt_times in der jeweiligen Instanz.

Hier suche ich nach einer Lösung, Elemente (Data Tables, Controls) in der jeweiligen Instanz von frm_singleList anzusprechen, von der aus das Eingabeformular aufgerufen wurde.

Ich hoffe das macht es einigermaßen klar. Ich kann gerne den kompletten Code posten, aber der ist ewig lang und nur super einfaches Standartdzeugs. Ich vermute, daß ich etwas Grundlegendes nicht verstanden habe, nämlich wie ich Daten zwischen Forms austauche und von einer Form X beliebige Elemente auf einer spezifischen Instanz von Form Y zugreife und ändere.

beste Grüße!

Novatlan
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Auf Werte in verschiedenen Instanzen eines Formulars zugreifen 
Autor: Manfred X
Datum: 01.07.20 19:23

Hallo!

Untergeordnete Formulare lösen ein Event aus und übergeben im Eventparameter
die erforderlichen Angaben zum Ereignis und z.B. die Referenz auf die Instanz
der Daten-Klasse, deren Inhalt im übergeordneten Formular verarbeitet werden soll.
Im übergeordneten Formular werden die im Eventhandler als Parameter übergebenen
Angaben (Datenzeile, Datenspalte) und die Daten in die Datenquelle
eingetragen.
Nie sollte ein untergeordnetes Formular auf andere Weise mit dem übergeordneten
Formular kommunizieren. Es entstünden leicht Abhängigkeiten, die ein unberechenbares
Programmverhalten zur Folge hätten.

Beitrag wurde zuletzt am 01.07.20 um 19:25:22 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2020 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel