Hallo Dirk,
Du willst, oder musst, etwas erstellen das Menschen bedienen können die unerfahren mit deinem Programm ja sogar vielleicht unerfahren mit dem PC sind? Und das ganze auch noch Bedienerfreundlich ist? Na dann kann ich zumindest aus meiner Sicht nur sagen, das noch so einiges auf dich zukommt um das Ziel zu erreichen. Denn vor so einer Grundsätzlichen Problematik stand ich auch mal vor sehr vielen Jahren.
Fangen wir mit etwas fast nebensächlichem an.
Du willst die Position und Größe des Dialogs festsetzen. Dann beachte bitte auch das der oder die Zielcomputer das gleiche Betriebssystem haben, und mit der gleichen Auflösung fahren.
Kommen wir zum eigentlichem Code.
Du hast einige Variablen öffentlich deklariert, das ist schon mal für einen Dialog sehr gut.
Nur warum nutzt Du das nicht konsequent weiter?
Das hier
Code: Alles auswählen
odlg_Dialog.model.controlModels(4).enabled = False ' Das Feld "MatSt" ausblenden
oDlg_Dialog.model.controlModels(4).BackgroundColor = RGB(221,221,221)
steht in der *Sub MatAnlegen*. Aber auch in der *Sub AD_EingabeFeld(event)* ist das widerzufinden, blos mit anderen Parametern. Das Element was Du im Dialog ansprichst ist das selbe, nur änderst Du die Parameter (z.B. FALSE => TRUE).
Erspare dir so einiges an Tipparbeit. und setze für das Element eine öffentliche Variable, die Du dann in der 'Haupt-Sub' Namens *Sub MatAnlegen* anschließend defenierst. Von da an kannst Du anschließend in jeder anderen Sub auf diese Variable immer zugreifen.
Beispiel wie ich mir das so denke.
odlg_Dialog.model.controlModels(4) ist ja das Feld "MatSt". Nur ist daraus nicht ersichtlich um was für ein "Feld" es sich dabei handelt. Aber das ist ja im Eigenschafts-Fenster des Elements nachzulesen, was müsig ist. Also machen wir das anders.
Als erstes kommt die öffentliche deklaration.
Jetzt kommt die defenition.
Und jetzt reicht folgendes um den eben zitierten Code zu ändern.
Code: Alles auswählen
oMatDicke.enabled = False ' Das Feld "MatSt" ausblenden
oMatDicke.BackgroundColor = RGB(221,221,221)
Schon mal bedeutend weniger rumgetippe
Und das gleiche kommt dann auch in der *Sub AD_EingabeFeld(event)* rein, blos mit den anderen Parametern.
Dir ist sicherlich aufgefallen das ich nicht den Weg über ".model.controlModels" gehe, sondern die Abkürzung über ".getControl" nehme. Es gibt da wohl einen technischen und funktionalen unterschied zwischende3n beiden genannten Wegen, der mir jetzt aber nicht so geläufig ist, aber für so einfache Sachen wie Hintergrundfarbe und Aktivieren ist der kurze Weg allemale ausreicheend. Wenn z.B. Tom sich zu dem Punkt äußern will, ist das in Ordnung.
Aber bleiben wir bei diesem Element und schauen wir mal weiter.
Du kommentierst.
Jedoch wird mit 'enabled' nicht ausgeblendet, sondern lediglich aktiviert beziehungsweise deaktiviert. Das Feld verschwindet dadurch nicht optisch, es ist halt deaktiviert, wenn Du '.enabled = False' setzt.
Wilst Du es wirklich ausblenden dann musst Du über '.Visible = False' das machen.
So, und nun kommen wir zum eigentlichem Sinn des ganzen.
Du willst in gewisser Weise bestimmte Dinge vermeiden, wie z.B. das eine falsche Reihenfolge durchgeführt wird. Und das könnte man jetzt mit dem eben gezeigten recht gut kombinieren. Klar, das muss ich leider vorweg sagen, ist der Programieraufwand doch etwas erhöht, aber nicht die Programierung steht primär im "Zielfokus" sondern der Bediener. Und für ihn muss man halt recht viel Arbeit und Zeit investieren.
Also nur das eine Feld "ein- beziehungsweise auszuschalten" ist ja schon mal nicht schlecht. Ich persönlich wurde aber weiter gehen in dem auch die Bezeichnung im Dialog dementsprechend behandelt wird. Also die Bezeichnung "Material-Stärke:" die ja links neben dem Feld steht.
Jetzt kommt die defenition in der *Sub MatAnlegen*
weiter in der gleichen Sub
Da ich unter Zeitdruck stehe, noch folgendes.
In der *Sub MatAnlegen* werden alle Elemente die zu anfangs nicht gebraucht werden erstmal auf nicht Sichtbar ".Visible = False" gesetzt. Das gilz für die Eingabefelder und die Bezeichnungen. Und erst nach dem ein Feld ordnungsgemäß ausgefüllt und überprüft wurde, wird das nächste Sichtbar geschaltet. Dein, ich sags mal so rum, Eingabeformular wird stufenweise sichtbar geschaltet.
Uiuiui!
Reichlich viel zu verarbeiten. Aber überdenke es dir mal in Ruhe. Du must ja meinen Vorschlag bezüglich der Stufenweise Freischaltung nicht übernehmen, aber vielleicht ist ja mein Vorschlag mit der genannten Abkürzung hilfreich.
Wünsche weiterhin viel Erfolg und Glück.
Gruß
balu