vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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!

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fragen zu Tipps & Tricks und Workshops im vb@rchiv
Tipp 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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!



Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.














Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um einen neuen Beitrag schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel