| |
Visual-Basic EinsteigerEine Sub-Procedur für 2 Formen | | | Autor: amigo | Datum: 24.04.16 23:01 |
| Hi - ich verwende 2 Formen die jeweils die gleiche Textbox anzeigen ( diese werden auf 2 versch.Screens angezeigt). Jetzt möchte ich die beiden textboxen mit nur einer Procedur beschicken. Da es aber eine vielzahl von Anweisungen gibt, möchte ich die Form als Variable definieren. Wie kann ich den Form-Namen übergeben ?. Ich find hier einfach nix. vielen Dank.
( Ach ja - VB6 - hab' ich vergessen )
Beitrag wurde zuletzt am 24.04.16 um 23:03:27 editiert. | |
Re: Eine Sub-Procedur für 2 Formen | | | Autor: Franki | Datum: 25.04.16 01:38 |
| Hallo,
deine Beschreibung ist etwas durcheinander.
Du kannst ein Steuerelement (Textbox) jederzeit individuell ansprechen, indem du den Formularnamen voran sellst.
' In Form1
Private Sub Command1_Click()
Form1.Text1.Text = "blabla"
Form2.Text1.Text = "blabla"
Form2.Visible = True
End Sub Mir Schleifen wie z.B. For Each kannst du sowohl Formulare als auch Steuerelemente durchlaufen und anhand Kriterien bestimmen, ob eine Befehle zutreffend sein sollen oder nicht.
Was genau meinst du mit "gleicher Textbox"?
Hat die nur den gleichen Namen oder die gleiche Datenquelle (Datenbank oder sonstige Abhängigkeit)? Wenn eine Bindung besteht, dann wird das wenn in einem Modul programmiert automatisch aktualisiert.
Gruß
Frank | |
Re: Eine Sub-Procedur für 2 Formen | | | Autor: amigo | Datum: 25.04.16 16:31 |
| Hallo Frank, sorry - ich merke schon, daß ich einfach "besser fragen" muss. Ich bin neu hier und das werde ich noch lernen. also...
ich habe 2 formulare, die ich auf untersch.monitoren anzeigen will. der Inhalt ist derselbe. also z.b. eine textbox mit einem haufen zeug. die sub-procedur, die ich aufrufe, soll sich aber nicht darum kümmern müssen, um welches formular es sich handelt. Also denke ich, daß ich den formular-namen irgendwie übergeben muss. Es gibt keine Datenbank oder sonstige Datenquelle mit Bindung.
Danke schon mal im voraus für Deine "Mühe, darüber nachzudenken."
Gruß
amigo | |
Re: Eine Sub-Procedur für 2 Formen | | | Autor: Manfred X | Datum: 25.04.16 17:07 |
| Hallo!
Greife nicht direkt auf Controls zu, sondern richte geeignete Properties
auf den Formularen ein.
Beispiel: Code für Form1
'Variable für Controls auf Form1
Dim WithEvents tbo As VB.TextBox
Dim WithEvents btn As VB.CommandButton
'Variable für weitere Formularinstanz
Private subform As Form1
Private Sub btn_Click()
'Erstellung einer neuen Instanz
Set subform = New Form1
subform.Show 'Controls werden erstellt
'Übergabe des Inhalts der Texteigenschaft
subform.TBO_Text = Me.TBO_Text
End Sub
Private Sub Form_Load()
'Instanzen der Controls erstellen und einrichten
Set tbo = Me.Controls.Add("VB.TextBox", "tbo1")
tbo.Visible = True
Set btn = Me.Controls.Add("VB.CommandButton", "btn1")
btn.Top = 600: btn.Caption = "SubForm"
btn.Visible = True
End Sub
'Eigenschaft für Setzen und Abfragen eines Textes
Public Property Let TBO_Text(ByVal str As String)
tbo.Text = str
End Property
Public Property Get TBO_Text() As String
TBO_Text = tbo.Text
End Property
'Beispiel für eine Ereignisverarbeitung
Public Sub tbo_change()
Me.Caption = tbo.Text
End Sub | |
Event-Koordinierung mehrerer Formular-Instanzen | | | Autor: Manfred X | Datum: 26.04.16 10:46 |
| 'Variable für Controls auf Form1
Dim WithEvents tbo As VB.TextBox
Dim WithEvents btn As VB.CommandButton
'Variable für weitere Formularinstanz
Private subform As New Form1
Public IsSubForm As Boolean 'Kennung für untergeordnete Form-Instanz
Private Sub btn_Click()
'Subform erstellen/anzeigen
subform.Show
'Übergabe des Inhalts der Texteigenschaft
subform.TBO_Text = Me.TBO_Text
End Sub
Public Sub InitForm()
'Instanzen der Controls erstellen und einrichten
Set tbo = Me.Controls.Add("VB.TextBox", "tbo1")
tbo.Visible = True
Set btn = Me.Controls.Add("VB.CommandButton", "btn1")
btn.Top = 600: btn.Caption = "SubForm"
btn.Visible = True
End Sub
Private Sub Form_Load()
InitForm
subform.IsSubForm = True 'Kennung unterg. Instanz
End Sub
'Eigenschaft für Setzen und Abfragen eines Textes
Public Property Let TBO_Text(ByVal str As String)
If Not tbo Is Nothing Then
tbo.Text = str
End If
End Property
Public Property Get TBO_Text() As String
If Not tbo Is Nothing Then
TBO_Text = tbo.Text
End If
End Property
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'Benutzer-Entladung untergeordneter Formulare verhindern
If UnloadMode = vbFormControlMenu Then
Cancel = IsSubForm
If Cancel Then Me.Hide
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Untergeordnete Formular-Instanzen schließen
If Not subform Is Nothing Then Unload subform
End Sub
Public Sub tbo_change()
'Weitergabe des aktuellen Textes an unterg. Form
subform.TBO_Text = Me.TBO_Text
End Sub | |
Re: Eine Sub-Procedur für 2 Formen | | | Autor: amigo | Datum: 26.04.16 15:28 |
| Thanx an Alle - @Manfred X, das muss ich ich erst mal verdauen. @Dieter, das wars - genial einfach, aber wo hätte ich denn das nachlesen können?
Ich hab mir jetzt auch die CD bestellt und denke, daß ich hier noch öfter auftauchen werden. Nochmal - Danke | |
Re: Eine Sub-Procedur für 2 Formen | | | Autor: Manfred X | Datum: 27.04.16 06:24 |
| Hallo!
Die "genial einfache" Variante ist nicht empfehlenswert.
Formulare (allgemein: Klassen) stellen jeweils eine bestimmte Funktionalität
zur Verfügung und müssen zu deren Sicherstellung u.a. ihre Controls
(allgemein: untergeordnete Klasseninstanzen) sowie die verwalteten Daten
überwachen.
Zugriffe "von aussen" sind deshalb über öffentliche Eigenschaften
oder Methoden [u]des Formulars zu gestalten.
Im Einzelfall erledigen solchen Properties etwa folgende Aufgaben:
- Gültigkeitsprüfung der übergebenen Daten
- Validierung/Konsistenzbeurteilung der Daten (Abgleich mit
anderen Einstellungen/Daten, die das Formular aktuell verwaltet)
- Ereignis-Management (z.B. Sperren der Code-Ausführung von
Ereignishandlern der Controls oder Auslösung öffentlicher Ereignisse
des Formulars)
- Daten-Management (z.B. Weiterleitung von übergebenen validen Daten an
untergeordnete Klasseninstanzen)
- Anpassung der Controls-Eigenschaften gemäß der übergebenen Daten
bzw. Anforderungen (z.B. Size/Enabled/Backcolor)
- u.a. | |
Re: Eine Sub-Procedur für 2 Formen | | | Autor: Franki | Datum: 28.04.16 02:33 |
| Hallo Manfred X
Zitat: | |
Die "genial einfache" Variante ist nicht
empfehlenswert. | |
Was du schreibst ist alles richtig, aber Gültigkeitsüberprüfung, Validierung usw. brauchen ja bei reiner Anzeige nicht doppelt im Programmcode gemacht zu werden wenn es sich nur um die reine Übergabe von Inhalt für eine Textbox handelt. Das muss einmal gemacht werden, wenn alles OK, dann übergeben ansonsten halt nicht.
Wir wissen ja nicht was der Zweck der Übergabe von einem an das andere Formular ist beim Fragesteller.
Aus der Praxis kenne ich aber Fälle wo ich das durchaus auch so mache. (z.B. Statusmeldungen in einem Produktionsbetrieb auf einen 61 Zoll Monitor der an der Wand hängt und den Mitarbeitern Informationen zeigt.) Dieses Formular auf dem zweiten Monitor kann niemand bedienen, da gibt es keine Schaltflächen die angeklickt werden können usw. Alles nur rein informativ.
Und dieses zweite Formular ist auch nicht identisch mit dem aufrufenden Formular, es zeigt nur die Sachen an die übergeben werden, rein informativ halt.
Ind diesem Fall wäre es völlig unnötig für jedes der beiden Formulare eine Validierung usw. durchzuführen. Eine 1 zu 1 Übergabe des Inhaltes reicht völlig aus.
Gruß
Frank | |
Re: Eine Sub-Procedur für 2 Formen | | | Autor: Manfred X | Datum: 28.04.16 09:14 |
| Hallo!
Mir ging es darum, deutlich zu machen, wie das Zusammenwirken
von Instanzen verschiedener Klassen zu organisieren ist.
Daten-Validierung ist dabei nur ein Aspekt von vielen.
Das skizzierte Vorgehen gilt uneingeschränkt auch in Fällen,
die keine Daten-Validierung erforderlich machen.
Übergeordnete Ziele sind ....
- Strukturierung des Codes (Wartung, Weiterentwicklung)
- Wiederverwendbarkeit der Klassen
- Nachvollziehbarkeit der Aufrufwege zur Laufzeit
- Multithreading: Koordinierung der Zugriffe
- Kontrolle der Ereignis-Auslösung (z.B. Vermeidung von Ereignisketten)
Bei den von Dir geschilderten Bedingungen:
Das (untergeordnete) Formular für die Anzeige auf dem Großmonitor
enthielte entsprechende öffentliche Formular-Eigenschaften für die
Zuweisung der Daten (die intern an die Controls weitergeleitet werden).
Beim Erstellen dieser Instanz oder beim Eintreten von Daten-Änderungen
(Ereignisse im Basisformular) würde das "Basisformular" seine Daten an
diese Eigenschaften des untergeordneten Anzeige-Formulars übergeben.
Auch ein "passives", "informatives" Anzeige-Formular muß evt. auf die
gegebenen Daten reagieren (z.B. Anpassung von Controls-Eigenschaften,
Unterbrechung der Layoutlogik während der Zuweisungen, Resizing-Verarbeitung).
Beitrag wurde zuletzt am 28.04.16 um 09:17:05 editiert. | |
Re: Eine Sub-Procedur für 2 Formen | | | Autor: Franki | Datum: 29.04.16 01:02 |
| Hallo Manfred X
Zitat: | |
Bei den von Dir geschilderten Bedingungen:
Beim Erstellen dieser Instanz oder beim Eintreten von
Daten-Änderungen
(Ereignisse im Basisformular) würde das
Basisformular seine Daten an
diese Eigenschaften des untergeordneten Anzeige-Formulars
übergeben.
| |
Genau so ist es und soll es sein....
Zitat: | |
Auch ein passives, informatives
Anzeige-Formular muß evt. auf die
gegebenen Daten reagieren (z.B. Anpassung von
Controls-Eigenschaften,
Unterbrechung der Layoutlogik während der Zuweisungen,
Resizing-Verarbeitung). | |
Wenn dem so ist dann ja. Aber wenn das passive Formular auf dem Monitor in den anzuzeigenden Teilen nur eine 1:1 Spiegelung ist, dann kann man die anderen Eigenschaften natürlich auf gleiche Weise zuweisen. Also ob sich z.B. eine Textfarbe in ROT GRÜN ändert usw. als informatives Highlight auf dem Großmonitor muss natürlich dann aus dem Basisformurlar auch zugeweiesen werden.
Das passive Formular muss eigentlich nicht eigenständig reagieren können wenn es einen rein Informativen Charakter hat. Größenänderung ist auch nicht das Thema, da es sich immer um eine Vollbilddarstellung auf dem Kontrollmonitor handelt.
Aber wie auch immer, wir wissen immer noch nicht was der OP für eine Absicht hat zwei Formulara zu verwenden, und ob deine Einwände evtl. zum tragen kommen oder nicht.
Ich habe auch einigen Anwendungen erstellt die einen POS betreffen, da ist es auch so, dass auf dem POS Display was der Kunde sieht keine unvorhergesehen Dinge auftauchena bzw. eine Interaktivität seitens dieses Formulars was dort angezeigt wird erforderlich ist.
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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|