| |
Visual-Basic EinsteigerRun-time error 401 | | | Autor: crosstravel | Datum: 31.12.19 07:45 |
| Hallo Zusammen,
im Dispositionsteil meiner Applikation ist es erforderlich, dass der Benutzer von einer Form in eine andere von von dort in eine dritte und von dieser vielleicht zurückspringen muss (Dispo Auftrag -> Dispo Fahrzeug -> Dispo Fahrer <- zrück zu Dispo Auftrag ...). Um hier die betroffenen Forms steuern zu können, habe ich den Tipp von Dieter (Ist ein Formular geladen?) eingesetzt. Leider ist es so, dass hier im Gebrauch ein Fehler auftritt. Ich frage mich, ob ich einen Fehler mache? Der Runtime-Error tritt immer auf, wenn die Form bereits geladen ist. Es sind 2 unterschiedliche Meldungen; jenachdem die Form modal oder nicht modal aufgerufen wird:
frmTerminplaner.show
Can't show non-modal form when modal form is displayed
frmTerminplaner.show vbmodal
Form already displayed; can't show modally
Die Meldungen sind mir schon klar; ich weiss jedoch nicht, wie ich diesen begegnen soll. Vielleicht hat jemand eine Idee.
Vielen Dank und einen guten Rutsch ins 2020
Rainer
Private Sub btnFahrzeug_Click()
If IsFormLoaded("frmTerminplaner") Then
frmTerminplaner.Show
Else
Load frmTerminplaner
frmTerminplaner.Show vbModal
End If
End Sub
Beitrag wurde zuletzt am 31.12.19 um 07:47:37 editiert. | |
Re: Run-time error 401 | | | Autor: effeff | Datum: 31.12.19 13:43 |
| Wenn die Form bereits geladen ist, sollte es doch reichen, sie zu aktivieren.
Ich habe hier kein VB6 mehr, aber irgendwas ala
If IsFormLoaded("frmTerminplaner") Then
frmTerminplaner.Activate
Else... EALA FREYA FRESENA | |
Re: Run-time error 401 | | | Autor: crosstravel | Datum: 31.12.19 13:47 |
| Ich probiere das mal aus; klingt auf jeden Fall logisch.
Gruss
Rainer | |
Re: Run-time error 401 | | | Autor: Souffleurlos | Datum: 31.12.19 16:29 |
| Hallo crossltravel,
du hast alles was du brauchst. Das VB Objekt ist dein Freund! Es verwaltet selbst VB.FORMS das mit ForEach durchlaufen werden kann und teilt dabei auch mit, welches das gerade aktivierte Form ist.
-> Beispiel: VB.Forms.Count gibt die Anzahl aller Forms zurück
-> Beispiel: VB.Forms(1).Caption den Titel der 1. Form
usw.
was braucht man den sonst mehr? VB-Objekt wird mit jedem VB-Projekt mit ins Boot genommen. | |
Re: Run-time error 401 | | | Autor: crosstravel | Datum: 01.01.20 07:22 |
| Hallo effeff,
zunächst wünsche ich Dir ein gutes und erfolgreiches 2020. Ich habe damit begonnen, Deinen Vorschlag zu testen. Leider funktioniert auch das Activate nich; hier gibt es übrigens keinen Activate - aber ein ActivateControl.
Herzliche Grüsse
Rainer | |
Re: Run-time error 401 | | | Autor: Wobi | Datum: 06.01.20 03:21 |
| Hallo Rainer,
wenn du vor- und zurückspringen möchtest in den Formularen solltes du modal vermeiden, das ist dafür eigentlich nicht geeignet. Die ganze Logik die du vorher schon hast musst du dann bei einem weiteren Aufruf der Form wieder durchlaufen um diesen Fehler zu vermeiden.
Warum überhaupt brauchst du eine Form mal normal und mal modal?
Wenn die Formulare zusammenhängend für den Bereich Dispo sind würde ich da mit einem Formular arbeiten welches verschiedene Bereiche hat wo du die Teile Auftrag/Fahrer/Fahrzeug usw. behandelt. Das könntest du über z.B. Tabs im Formular machen oder über vor/zurück Buttons oder was auch immer. Das wäre dann ein zusammenhängender Bereich wo alles übersichtlich eingegeben werden kann. Die Plausibilitätsprüfung ist dann auch einfacher als das über mehrere Formulare zu verteilen.
Gruß
Frank | |
Re: Run-time error 401 | | | Autor: crosstravel | Datum: 06.01.20 08:16 |
| Hallo Frank,
danke für Dein Feedback. Schade, dass die Disposition bei uns über drei einzelne Forms und nicht z.B. über Tabs gelöst wurde. Ich denke, hier fällt in nächster Zeit etwas Redesign-Arbeit an.
In der Applikation werden alle Forms, bei welchen der Benutzer eine Eingabe machen muss, mit xxx.show vbModal aufgerufen. Ich war der Meinung, dass das erforderlich ist?! Ich muss mich nun mal kundig machen, um den Unterschied von Modal und Nicht-Modal zu verstehen. Vielleicht kast ja Du eine kurze knackige Erklärung.
Einen guten Wochenstart und vielen Dank
Rainer | |
Re: Run-time error 401 | | | Autor: effeff | Datum: 07.01.20 17:04 |
| Eine Form, die vbModal als Eigenschaft hat, ist immer das oberste Fenster Deiner Anwendung. Wenn Du mehrere Formen hast, die Du vbModal, also als oberstes Fenster, anzeigen lassen willst, klappt das natürlich nicht. Das ist wie beim Highlander: Es kann nur einen geben!
Benutze Deine Forms also normal, wenn Du mehrere hast und zwischen denen hin und her switchen willst.
EALA FREYA FRESENA | |
Re: Run-time error 401 | | | Autor: Wobi | Datum: 08.01.20 00:06 |
| Hallo Rainer,
effeff hat das ja schon sehr gut erklärt.
Es kann natürlich mehrere Formulare in einer Anwendung geben die modal aufgerufen werden, aber nicht gleichzeitig. Ein modal aufgerufenes Form "blockiert" sozusagen den Rest der Anwendung so dass der User in diesem und nur in diesem Formular arbeiten kann bzw. soll.
Erst wenn die Arbeit in diesem Formular erledigt ist muss es geschlossen/entladen werden und danach kann z.B. aus dem Hauptformular ein anderes Formular modal aufgerufen werden. Der Aufruf modal soll verhindern, dass der User zwischendurch woanders hin geht. Deswegen verhindert man auch meistens, dass das modal aufgerufene Formular minimiert werden kann, der User sieht es dann nicht mehr, kann aber nichts anderes in der Anwendung machen.
Gruß
Frank | |
Re: Run-time error 401 | | | Autor: crosstravel | Datum: 08.01.20 13:57 |
| Hallo Frank und effeff,
danke für die Erkläuterungen. Wenn ich also verhinden möchte, dass der Benutzer während der Arbeit und und her springt (also erst seine Task beendet) setze ich modal. Wenn er die Möglichkeit haben soll, zwischen verschiednen Forms zu switchen (z.B. Auskunftsmasken) verzichte ich auf modal.
Jetzt ist ein Licht aufgegangen ..............
Vielen Dank und Gruss
Rainer | |
Re: Run-time error 401 | | | Autor: Wobi | Datum: 10.01.20 00:10 |
| Hallo Rainer,
ja richtig soweit. Es kommt aber immer auf die Anwendung an, ob modale Formulare sinnvoll sind oder nicht.
Für einige wenige Pflichtangaben die der User weiß sind sie es, aber wie du schon sagst, wenn der User dazu noch Auskünfte braucht aus anderen Teilen deiner Anwendung ist das mit modal nicht komfortabel für den User.
Da gibt es andere Wege (z.B. mit Variablen) die man nutzen kann um Pflichtangaben in einem Vorgang zu erfüllen, bzw. den Vorgang speichern zu können. Dazu kann man aber keine generellen Tipps geben, das kommt immer auf die Anforderungen der Anwendung an wie man das am sinnvollsten regelt.
Gruß und viel Erfolg
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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|