vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

Visual-Basic Einsteiger
mdi form und textbox 
Autor: spirit
Datum: 31.05.18 11:06

Hallöchen zusammen

Ich habe da mal eine Verständnis Frage. Es geht nicht darum eine Codelösung geliefert zu bekommen sondern eher eine Erklärung warum das folgende so ist wie es ist. Ich weis das dieses Thema rund um MDI Formulare schon mehrfach diskutiert wurde. Ich habe auch die SuFu ohne erfolg verwendet.

Folgender Sachverhalt:

Ich habe ein MDI Formular (mdiStart) aus dem ich mir über einem Menüpunkt ein neues Formular (childForm1) lade. In diesem childForm1 Formular wird über eine public Funktion (pFunction) eine Datenbankabfrage durchgeführt. Dieser Funktion wird ein Suchbegriff übergeben mit dem diese Funktion eine mySql "like" Abfrage macht. Aus der Funktion heraus bekomme ich einen Datareader zurück den ich auf Anzahl der Datensätze abfrage. Wenn der Reader nur einen Datensatz beinhaltet, wird das result in die im vorhandenen Textfelder der childForm1 übergeben. Bis hierhin funktioniert alles bestens.

Jetzt kommt der wesentliche Punkt:

Wenn mehr als 1 Datensatz vorhanden ist, wird eine weitere Form (form2) geladen, die kein Childformular ist. Diese Form wird über
dim objForm as new form2(dataReader as system.data.odbc.odbcdatareader)
objForm.showDialog()
Der dataReader wird in der Form2 ausgelesen und in ein Listview übertragen. Über eine prozedur in Form2 wird das selectItem des Listview ausgewertet, welches eine eindeutige ID enthält, der public function in childform1 (pFunction) übergeben.

Mit dieser eindeutigen ID kann nur 1 Datensatz gefunden werden und sollte in die Textfelder der childform 1 übergeben werden. Genau hier liegt aber das Problem das nichts angezeigt wird. Die Funkktion wird korrekt angesprochen und läuft Fehlerfrei durch. Der resultierende Reader beinhaltet auch die gewünschten Daten.
Im Einzelschritt und Überwachungsmodus werden auch den entsprechenden Textfeldern in der childForm1 die korrekten Daten übergeben. Aber es wird nichts angezeigt.

Daher meine Frage:

Warum werden die Daten in den Textfeldern nicht angezeigt ? Da die Funktion im selben Form ausgeführt wird in der sich die Textboxen befinden, denke ich das es kein Problem mit den viel diskutierten MDI Problemen zu tun hat.

Ich hoffe das mein Problem verstanden wurde. Wäre schön wenn es einen gibt der mein Problem erkannt hat und mir die Hintergründe dieses Verhaltens erklären könnte.

Im voraus vielen Dank!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: Souffleurlos
Datum: 31.05.18 11:35

Hallo,
für dieses Verhalten in VB.NET kann man Dir sicher weiterhelfen, wenn Du die Frage im richtigen Forum stellst.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: Manfred X
Datum: 31.05.18 13:20

Hallo!

Was genau Du programmiert hast, konnte ich Deinen Angaben nicht
eindeutig entnehmen.
Die form2-Instanz (untergeordnet) kann nicht bzw. sollte nicht direkt auf
die childform-Instanz zugreifen.

Probiere folgendes:

1.Richte in Form2 eine öffentliche Eigenschaft ein (evt. Readonly),
durch die eine ID abgefragt werden kann.

2. Weise in der Form2 das SelectedItem (ID) auf diese Eigenschaft zu.

3. Frage nach dem Showdialog-Aufruf in der childform die ID in dieser
öffentlichen Eigenschaft aus der Form2-Instanz (objForm) ab.

4. Trage diese abgefragte ID in eine entsprechende öffentliche
Eigenschaft der childform-Instanz ein. Binde die Text-Eigenschaft der
Textbox in der Childform an diese Eigenschaft.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: spirit
Datum: 31.05.18 14:13

Was hier beschrieben ist, ist eine Personendatenauswahl. Bei nur einer Person brauche ich keine weitere Form da der gefundende Datensatz direkt an die Textfelder ausgegeben werden kann. Erst bei mehreren gefundenen Personen benötige ich das Formular zur Auswahl der entsprechenden Person.

Dein Vorschlag kann ich nachvollziehen, finde aber das es am Procedere nichts ändert. Fakt bei deiner und meiner Vorgehensweise ist, das eine Variable zur Weiterverwendung in einer Funktion im ChildForm übergeben oder in deinem Falle abgefragt wird. Das funktionier auch. Wie ich aber schon am Anfang geschrieben habe, kann ich in der Überwachung sehen, dass dem Textfeld das korrekte (nach zuweisung der Listenauswahl aus der Form2) Ergebnis übergeben aber nicht angezeigt wird. Mit der Übergabe an der public function in der ChildForm wird die Form 2 geschlossen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: spirit
Datum: 31.05.18 14:33

Hier mal ein Code mit dem ich das gleiche Resultat habe

1. Das MDI Hauptformular

Imports System.Windows.Forms
 
Public Class MDIParent1
 
    Private Sub ShowNewForm(ByVal sender As Object, ByVal e As EventArgs) _
      Handles NewToolStripMenuItem.Click, NewToolStripButton.Click, _
      NewWindowToolStripMenuItem.Click
 
        Dim ChildForm As New Form1
        ChildForm.MdiParent = Me
        ChildForm.Show()
 
    End Sub
 
End Class
Die Child Form1

Public Class Form1
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
        Dim obj As New Form2
        obj.ShowDialog()
    End Sub
 
    Public Sub aa(var1 As String)
        TextBox1.Text = var1
    End Sub
 
End Class
und die Auswahl in der 2. form (Kein Child)

Public Class Form2
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
        Form1.aa("test")
    End Sub
 
End Class
Der Funktion im child bekommt in der Variablen var1 den Wert test übergeben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: spirit
Datum: 31.05.18 14:59

Könnte ein Admin bitte diesen Post in die VB.Net Rubrik verschieben? Danke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: Manfred X
Datum: 31.05.18 21:30

Hallo!

Bekanntes Problem!
Man kann leider in VB.Net einige Dinge tun, die ein
schwerer Verstoß gegen OOP-Regeln sind und praktisch zu
Problemen führen, die Du gerade hast.

Was geschieht?
Du erstellst eine Instanz von Form1 namens Childform.
In dieser Instanz öffnest Du als Dialog eine Instanz von Form2
namens Obj.
In Obj (Form1,aa) greifst Du nicht auf die rufende Instanz Childform zu,
sondern auf eine Defaultinstanz von der Klasse Form1 mit Namen Form1.
Das ist ein anderes (unsichtbares) Formular.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Ja, die Idee ist gut 
Autor: Souffleurlos
Datum: 31.05.18 21:35

dann muss man nicht die Lösungsversuche von Manfred X ertragen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: spirit
Datum: 01.06.18 08:22

Danke für deine Antwort. Irgendwas in der Art dachte ich mir schon. Wonach muss ich suchen um für dieses Problem eine Doku zu finden? gib es für dieses Problem einen Ausdruck?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: Manfred X
Datum: 01.06.18 10:16

Das Verhalten von VB, bei Nutzung einer Formularklasse
durch direkte Verwendung des Formular-Namens im Code (ohne New)
automatisch eine entsprechend benannte Instanz des Formulars zu erzeugen,
sollte es Anfängern erleichtern, einfache Anwendungen zu programmieren.
Bei komplexeren Codestrukturen gibt es diverse Probleme.
Deshalb: So nicht programmieren!! (Nachlesen zu diesem Thema lohnt
sich deshalb nicht)

http://jmcilhinney.blogspot.com/2009/07/vbnet-default-form-instances.html

Halte Dich an die einfache Regel:
Übergeordnete Klassen nutzen öffentliche Eigenschaften und öffentliche
Methoden der untergeordneten (per New) erstellten Klassen-Instanzen
zum Informationsaustausch.
Untergeordnete Klassen lösen Events aus (Raise), um Informationen an
die übergeordnete (erstellende) Klassen-Instanz weiterzugeben.
Im Code der übergeordneten Klasse entscheidet sich, ob und wie diese
Events weiterverarbeitet werden.

Beitrag wurde zuletzt am 01.06.18 um 10:18:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: mdi form und textbox 
Autor: spirit
Datum: 01.06.18 11:09

Danke für deine Antwort die ich so nachvollziehen kann. Ich habe in der new sektion die aufrufende form als object übergeben ein Klassenobject erstellt.



public sub new(myForm as Form)
im weiteren habe ich die die Methode in der aufrufenden Klasse über dieses Object aufgerufen.

myForm.publicMethode(Values)
und schaue da... es funktioniert

Ich sehe mein Problem damit als gelöst an. Vielen Dank für eure Hilfe
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Ja, die Idee ist gut 
Autor: Franki
Datum: 02.06.18 01:40

Hallo,
was hast du denn an seinen Lösungsversuchen auszusetzten?

Du liest doch sowieso beide Foren, also wäre dir auch nichts "erspart" geblieben.

Gruß
Frank
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-2024 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