| |
| In diesem Forum haben Sie die Möglichkeit Kommentare, Fragen und Verbesserungsvorschläge zu den im vb@rchiv gelisteten Tipps und Workshops zu posten.
Hinweis: Ein neues Thema kann immer nur über die jeweilige Tipps & Tricks bzw. Workshop Seite eröffnet werden! | Fragen zu Tipps & Tricks und Workshops im vb@rchivTipp 1359: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Sophus | Tipp anzeigenDatum: 31.08.13 19:23 |
| Entweder funktioniert der Code nicht oder ich stelle mich einfach zu blöd an. Leider wird auch nicht näher erklärt, wie man mit dem Code umgehen soll. Ich habe die Codes in ein Modul kopiert. Und nun will ich mit einem Command_Button via Click-Ereignis abrufen, und zwar so:
Command1_Click()
Call MakeChild
End Sub Aber es kommt immer die Meldung, dass das Argument nicht optional sei.
Was mache ich falsch? | |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Manfred X | Datum: 31.08.13 22:30 |
| Du mußt natürlich die beiden erforderlichen Parameter
beim Aufruf der Funktion angeben,
d.h. die Fensterhandles von Child-und MDI-Window!
| |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Sophus | Datum: 31.08.13 23:16 |
| Diese beiden erforderlichen Parameter?
Private Sub Command1_Click()
Call MakeChild(ByVal hWndChild As Long, ByVal hWndMDI As Long)
End Sub Habe ich auch schon probiert. Erfolglos.
Beitrag wurde zuletzt am 31.08.13 um 23:17:04 editiert. | |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Manfred X | Datum: 31.08.13 23:57 |
| Forms haben eine Eigenschaft hWnd (= Fensterhandle).
Du mußt diese Eigenschaft der beiden Formulare übergeben.
'Deklaration des MDI und Child-Formulars
Dim mdi As New MDIForm1
Dim child As New Form1
'Aufruf der Funktion in einem Click-Ereignis
Private Sub Command1_Click()
MakeChild child.hwnd, mdi.hwnd
End Sub | |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Sophus | Datum: 01.09.13 02:14 |
| Ich habe es noch nicht getestet, aber ich danke dir, Manfred x. Ich finde es nur schade, dass es in diesem Tipp nicht genauer erwähnt wurde. Ein richtig guter Tipp zeichnet sich neben der guten Idee auch darin aus, dass man eben auch didaktisch erklärt wohin was gehört. Dies hat auch einen Lern-Effekt. | |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Sophus | Datum: 01.09.13 02:39 |
| Hallo Manfred x,
ich melde mich nochmal zurück. Ich musste den Code um diese Uhrzeit doch noch testen, es ließ mir einfach keine Ruhe. Wenn ich deinen Vorschlag übernehme, dann erscheint ein Laufzeitfehler '426' mit dem Hinweis, dass nur ein MDI-Formular zugelassen sei. Natürlich war ich auch so mutig, und habe in der Deklaration anstatt [...] As New MDIForm1 und [...] As New Form1, dass 'New' weggelassen. Führe ich das dann ohne 'New' in der Deklaration aus, dann bekomme ich einen Laufzeitfehler '91' mit dem Hinweis, Objektvariable oder With-Blockvariable nicht festgelegt sei. | |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Manfred X | Datum: 01.09.13 10:29 |
| Du kannst nur ein Formular des Typs MDI-Form in der Anwendung haben.
Falls eine Instanz dieses Formular-Typs im Projekt bereits existiert
(z.B. eingefügt per Menü: Projekt->MDI-Formular hinzufügen)
und Du die Funktion innerhalb dieses Formulars aufrufen willst,
entfällt jegliche weitere Deklaration der MDIForm.
Der Zugriff auf die hwnd-Eigenschaft erfolgt in dem Fall am
besten durch die Verwendung von "Me".
'Aufruf der Funktion im Code der MDIForm - falls Child der Name des Formulars ist,
das zum MDI-Child gemacht werden soll ....
MakeChild child.hwnd, me.hwnd Das sind Grundkenntnisse.
Beitrag wurde zuletzt am 01.09.13 um 10:34:37 editiert. | |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Sophus | Datum: 01.09.13 14:23 |
| Hallo Manfred x,
danke für deine Antwort. Ob es Grundkenntnisse sind oder nicht, das spielt keine Rolle. Codes von anderen Menschen schaut man sich an um dadurch zu lernen, richtig? Ich lerne zumindest davon, bzw. versuche dadurch zu lernen. Und daher finde ich es schon schade, dass in diesem Tipp nicht jeder Schritt aufgeschrieben wurde. Ich sehe die Tipps als eine Art Support an. Und je ausführlicher ein Support ist, desto eher kann man davon reden, dass es eben ein sehr guter Support ist. Diejenigen, die die Grundkenntnisse besitzen können es ja getrost überlesen. Entschuldige, wenn ich meine Meinung hier breittrete. Ich bin ein angehender Lehrer, und da wird man auf didaktischer Ebens angehalten nicht eben einfach alles voraus zu setzen, sondern möglich alle Schüler zu erreichen, damit nicht der Rest der Schüler im Unterricht langweilen, weil sie eben nicht mitkommen und der Lehrer aber denkt "Ja das sind Grundkenntnisse". Viele Lehrer denken traurigerweise so, aber ein richtig guter Lehrer denkt nicht so und sagt sich "Moment, dann füllen wir die Lücke ganz schnell" oder er fängt generell umfangreich an. Egal, ich danke dir für deine Mühe.
Zur MDIForm-Instanz. Ich dachte in diesem Augenblick so: Wenn ich einer normalen Form die Eigeshaft MDIChild = True geben will muss ja auh zuerst die MDIForm vorhanden sein. Mir ist es in diesem Code entgangen dass die MDIForm alzur Laufzeit kreiiert wird.Mein Denkfehler.
Beitrag wurde zuletzt am 01.09.13 um 14:27:09 editiert. | |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Manfred X | Datum: 01.09.13 14:35 |
| Hallo!
Ich bin zwar kein Lehrer, aber ....
In Foren oder Tipp-Archiven werden Detail- und Spezial-Themen behandelt.
Sie dienen NICHT dem Zweck der Ausbildung.
Das können (und wollen) die Antwortenden nicht leisten.
Dafür gibt es z.B. (manchmal sogar didaktisch aufgebaute) Lehrbücher.
Die Nutzung von Programmier-Foren setzt notwendig voraus, daß man die
jeweilige Sprache bereits (sehr weitgehend) beherrscht.
Als Lehrer solltest Du wissen, welches Medium für welche Leistungen
"zuständig" ist - und Deine Beurteilung danach ausrichten.
| |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Sophus | Datum: 01.09.13 14:55 |
| Hallo Manfred x,
ich habe soeben die Variante, die du mir vorgeschlagen hast, ausprobiert, aber dazu später. Zunächst einmal sagtest du, dass eine MDIForm1-Instanz nur einmal "kreiert" werden kann. Dazu hattest du den Anruf so formuliert:
'Deklaration des MDI und Child-Formulars
Dim mdi As New MDIForm1
Dim child As New Form1
'Aufruf der Funktion in einem Click-Ereignis
Private Sub Command1_Click()
MakeChild child.hwnd, mdi.hwnd
End Sub Ich dachte mir einfach mal, machst es so wie Manfred x gesagt hat, die MDIForm nicht in der VB-IDE erstellen, sondern sie zur Laufzeit erstellen lassen. Das Problem ist allerdings, dass bei der Deklaration die MDIForm1 nicht als 'As New' deklarieren lässt. Wie denn auch? Die MDIForm1 ist ja nicht in der VB-IDE vorhanden. Also wird dann der Fehler mit dem Hinweis ausgegeben, dass ein Benutzerdefinierter Typ nicht definiert sei.
Also erstelle ich in der VB-IDE eine MDIForm1, und verwende deinen Vorschlag, beim Aufruf die MDIForm1 nicht zu übergeben. Ich stelle das Projekt auch so ein, dass das Startobjekt MDIForm1 ist. Und die Form, die beliebig zur Child gemacht werden soll, rufe ich also über das Steuermenü (mnutest) auf. Und auf der Form, die aufgerufen wird, platziere ich einen Command-Button.
'Deklaration des MDI und Child-Formulars
Dim child As New Form1
'Aufruf der Funktion in einem Click-Ereignis
Private Sub Command1_Click()
MakeChild child.hwnd, me.hwnd
End Sub Aber es passiert einfacht nichts. Die Form ist weiterhin unabhängig von der MDIForm.
Beitrag wurde zuletzt am 01.09.13 um 15:12:49 editiert. | |
Re: Ein beliebiges Fenster zum ChildForm machen | | | Autor: Manfred X | Datum: 01.09.13 15:19 |
| Genaues Lesen hilft.
Ich hatte geschrieben, daß der Code in der MDIForm1
ausgeführt werden muß (Deklaration eines Formulars
und Anzeige als Child-Window) - z.B. in einem Menüpunkt
der MDIForm (Formular z.B. zugeordnet einer Collection
von Forms).
Ich hoffe, Du bist Dir auch im klaren, daß dieser Tipp
Windows veranlaßt, ein gewöhnliches Formular (MDIChild = false)
wie ein Child-Formular ANZUZEIGEN.
Dieses Formular ist aber für die VB6-Anwendung KEIN Child-Formular.
Es läßt sich deshalb nicht über MDI-Anweisungen arrangieren
und wird auch nicht in der "Windowlist" eines MDI-Menüs aufgeführt.
Falls solche Funktionen benötigt werden, müssen sie explizit
in MDIForm1 programmiert werden.
Beitrag wurde zuletzt am 01.09.13 um 15:25:19 editiert. | |
| Sie sind nicht angemeldet! Um einen neuen Beitrag 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 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
|