| |
Visual-Basic Einsteigermdi 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! | |
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. | |
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. | |
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. | |
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. | |
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 | |
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. | |
Ja, die Idee ist gut | | | Autor: Souffleurlos | Datum: 31.05.18 21:35 |
| dann muss man nicht die Lösungsversuche von Manfred X ertragen. | |
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? | |
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. | |
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 | |
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 | |
| 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 |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|