| |
VB.NET - Ein- und UmsteigerHauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: huber4 | Datum: 14.06.12 10:14 |
| Hallo,
hab da wiedermal ein Problem. Und zwar habe ich mehrere Hauptforms (frmUser,frmCity,...) von welchem ich bei einem ButtonClick ein zweites Form öffne:
- Rechtsklick in frmUsers öffnet frmRightClick
- Rechtsklick in frmCitys öffnet auch frmRightClick
In diesem 2. Fenster kann man nun Einstellungen für die Textboxen vom aufrufenden Fenster machen.
Ok, wenn ich dann auf "Speichern" im 2. Fenster klicke, sollten die Werte und Einstellungen für das aufrufende Fenster übernommen werden und da ist jetzt mein Problem: Wie spreche ich die Textboxen auf dem aufrufenden Fenster an? Ich weiss ja nicht, von welchem der User das frmRightClick geöffnet hat?
Ich weiss, dass es mit Formname.Textbox.Einstellung funktioniert, jedoch habe ich ja keine fixe Form von den das 2. Fenster aufgerufen wird, sonder es kann frmUsers,frmCitys,..... sein.
Muss ich da in den Hauptformen was instanzieren und an das 2.Form weitergeben oder wie macht man das am besten?
Hoffe ihr könnt mir da weiterhlefen! | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: Manfred X | Datum: 14.06.12 11:05 |
| Hallo!
Übliche Strategie:
Du erstellst in der "Form2" (Dialog?, "frmRightClick" -> unsinnige Bezeichnung!)
Properties für die Einstellungen, die an von der jeweils rufenden Form abgefragt werden
sollen. In dieser Form2 werden die Werte in den vom User gefüllten Texteigenschaften der
Controls z.B. auf die Membervariablen dieser Einstellungen z.B. bei Betätigung
eines OK-Buttons eingetragen.
Das rufende Formular fragt nach Beendigung des Dialogs (der per ShowDialog der
Form2 geöffnet worden ist) diese Eigenschaften ab.
(Ein Zugriff vom untergeordneten Formular auf das rufende Formular ist
zu vermeiden.)
Keine Defaultinstanzen verwenden (!!), sondern in frmUsers und frmCities jeweils
eine Instanz explizit ersellen: Dim MyRightclick as New frmRightClick
oder per Property die Instanz von frmRightClick (Referenz) an ein anderes
Formular weiterreichen.
MfG
Manfred
Beitrag wurde zuletzt am 14.06.12 um 11:06:09 editiert. | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: huber4 | Datum: 14.06.12 12:27 |
| Ok, erstmal danke.
Könntest du mir dazu einen Beispielcode geben was ich in den Hauptformen bzw. in der Unterform schreiben muss, wen ich z.B. den TabIndex einer Textbox vom Form frmUser verändern will, dieser aber im frmRightClick geändert wird, wie ich den Wert wieder zurückgebe, dass die Textbox auch den TabIndex hat?
Mfg
huber4 | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: Manfred X | Datum: 14.06.12 12:59 |
| Hallo!
Benenne Formulare nach ihrer Funktion - hier z.B. frmSettingsDialog
Public Class frmSettingsDialog
'Membervariable
Private Property _TB_Tabindex As Integer
'Per Code erstellte Controls
Private WithEvents txtTabindex As New TextBox _
With {.Parent = Me, .Top = 10, .Left = 10, .Width = 100}
Private WithEvents btnOk As New Button With _
{.Parent = Me, .Top = 40, .Left = 10, .Text = "OK", _
.DialogResult = DialogResult.OK}
Private WithEvents btnCancel As New Button With _
{.Parent = Me, .Top = 40, .Left = 100, .Text = "Cancel", _
.DialogResult = DialogResult.Cancel}
'Eigenschaft für Tabindex
Public Property TB_Tabindex As Integer
Set(ByVal value As Integer)
_TB_Tabindex = value
txtTabindex.Text = CStr(value)
End Set
Get
Return _TB_Tabindex
End Get
End Property
'Schließen des Formulars durch den User verhindern
Private Sub frmSettingsDialog_FormClosing(ByVal sender As Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles _
Me.FormClosing
If e.CloseReason = CloseReason.UserClosing Then
Me.Hide()
e.Cancel = True
End If
End Sub
'Eingabe kontrollieren
Private Sub txtTabindex_TextChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles txtTabindex.TextChanged
If txtTabindex.Text <> String.Empty Then
Dim index As Integer
If Not Integer.TryParse(txtTabindex.Text.Trim, index) OrElse index _
< 0 Then
MsgBox("Unzulässige Eingabe")
Else
_TB_Tabindex = index
End If
End If
End Sub
End Class Verwendung des Dialogs:
Public Class frmUser
Dim mySettingsDialog As New frmSettingsDialog With _
{.Owner = Me, .Visible = False}
Dim WithEvents btnSettingsDialog As New Button With _
{.Parent = Me, .Top = 10, .Left = 10, .Width = 100, .Text = "Settings"}
Dim txtDemo As New TextBox With _
{.Parent = Me, .Top = 40, .Left = 10, .Width = 300}
Private Sub btnSettingsDialog_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnSettingsDialog.Click
With mySettingsDialog
.TB_Tabindex = txtDemo.TabIndex
If .ShowDialog = DialogResult.OK Then
txtDemo.TabIndex = .TB_Tabindex
End If
End With
End Sub
End Class | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: huber4 | Datum: 14.06.12 14:13 |
| Super Sache, danke dir ;) | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: Manfred X | Datum: 14.06.12 14:57 |
| Hallo!
Begründung?
Woher willst Du wissen, dass eine im Dialog
abgefragte Eigenschaft sich auf eine Textbox bezieht?
Viele Eigenschaften sind von Control abgeleitet.
Eine abgefragte Eigenschaft kann sich in manchen rufenden
Formularen auf eine oder auch mal auf 5 Controls beziehen.
Du bringt hier unnötig eine Starrheit rein.
Nur im rufenden Formular (unterschiedliche Klassen!!) ist bekannt,
wie die Dialogrückgabe zu verwerten ist.
Mein Beispiel ist ein allgemein verwendbares Code-Gerüst.
MfG
Manfred
Beitrag wurde zuletzt am 14.06.12 um 15:04:21 editiert. | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: FZelle (Moderator) | Datum: 14.06.12 15:31 |
| Das ist immer der falsche weg.
Die aufgerufene Form sollte niemals die aufrufende kennen.
Entweder man macht es wie Manfred sagt per properties oder per event. | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: Micke | Datum: 14.06.12 16:58 |
| sein subfenster ist anscheinend sowas wie ein propertygrid für textboxen.
wie die einstellungen dort gesetzt werden, ob für alle controls oder jeweils, kann er ja machen wie er lustig ist.
"Nur im rufenden Formular (unterschiedliche Klassen!!) ist bekannt,
wie die Dialogrückgabe zu verwerten ist. "
das wissen wir eben nicht, das weiß eigentlich nur der anwender im editorfenster, ob er alle meint oder nur einzelne.
Micke | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: Micke | Datum: 14.06.12 17:06 |
| "Die aufgerufene Form sollte niemals die aufrufende kennen. "
er soll auch nicht den container übergeben. er soll genau das übergeben was editiert werden soll, in seinem fall textboxen.
ob nun einzeln oder als collection.
Micke | |
Re: Hauptform ist variabel -> Wie aus 2. Form ansprechen? | | | Autor: FZelle (Moderator) | Datum: 14.06.12 21:45 |
| Das ist der falsche weg.
UI Elemente sollten niemals übergeben werden, sondern wenn dann Daten. | |
| 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! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. 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
|