| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Form_Load() funktioniert nicht (724 mal gelesen)
|
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 18. Nov. 2007 10:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum. Ich will beim Laden der Form ein paar Einstellungen überprüfen. In einem Access-Programm verwende ich dafür Code:
Private Sub Form_Load() Debug.Print "Loading..." End Sub
Wenn ich nun die Form via frmMain.Show öffne oder mich direkt im Code befinde und das Makro starte, erscheint nichts im Fenster der Direktausgabe. Das gleiche bräuchte ich auch für "Form_Close()", falls es das gibt. Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 18. Nov. 2007 11:39 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
|
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 18. Nov. 2007 16:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten, danke, das Initialize() Event funktioniert, aber Deactivate() wird nicht aufgerufen, wenn ich das Fenster schließe. Auch nicht durch frmXX.Hide(). Hast du da noch eine Idee? Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 18. Nov. 2007 16:57 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
|
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 18. Nov. 2007 17:42 <-- editieren / zitieren --> Unities abgeben:
|
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 18. Nov. 2007 17:55 <-- editieren / zitieren --> Unities abgeben:
Ich habe mich glaube ich zu früh gefreut. Ich habe zwei Forms: frmMain und frmXData. frmMain ruft mit frmXData.Show die andere Form auf. Wenn ich frmXData schließe wird wieder frmMain aufgerufen in der termianate()-Methode. Klappt super. Wenn ich jedoch wieder bei frmMain den Button drücke und erneut die frmXData aufgerufen wird, kann ich die Form frmXData danach nicht mehr schließen :|. Also zwei Mal hintereinander klappts nicht. Button in frmMain:
Code:
Private Sub btnXData_Click() frmMain.Hide frmXData.Show End Sub
frmXData: Code:
Private Sub UserForm_Terminate() frmMain.Show End Sub
Lg Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 18. Nov. 2007 21:12 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
Hallo Peter, lass das mit dem Terminate - Ereignis. Benutze auf jeder Userform einen Button mit folgendem Beispielcode (den Namen des Userforms natürlich anpassen): Code: Private Sub CommandButton1_Click() Unload Me UserForm2.Show End Sub
------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 19. Nov. 2007 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
blöde Frage. Warum willst du das frmMain überhaupt verstecken. Lass es doch einfach unter dem frmXDATA offen wennst das frmXDATA modal startest, kann er im Hauptfenster eh nichts tun Button in frmMain: Code: Private Sub btnXData_Click() '''''''''''''''' frmMain.Hide (weg damit) frmXData.Show vbModal msgbox "wird erst angezeigt nachdem frmCDATA wieder geschlossen wurde" End Sub frmXData: Code: Private Sub UserForm_Terminate() ''''''''''''''''''''' frmMain.Show (weg damit) End Sub ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC [Diese Nachricht wurde von fuchsi am 19. Nov. 2007 editiert.] [Diese Nachricht wurde von fuchsi am 19. Nov. 2007 editiert.] [Diese Nachricht wurde von fuchsi am 19. Nov. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 19. Nov. 2007 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
|
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 20. Nov. 2007 19:33 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich muss deshalb beide Forms VERSCHWINDEN lassen, weil ich ein SelectionSet mit SelectOnScreen verwende, und dabei keine Form offen sein darf. Deshalb funktioniert deine Methode in meinem Fall nicht! Wenn ich die 2. Form Modal öffne, muss ich sie bevor ich das SelectionSet verwende erst wieder mit Hide schließen und dadurch erscheint gleich wieder die Form frmMain. Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 20. Nov. 2007 19:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Nepumuk, danke für die Antwort. Kann ich irgendwie die Leiste oben verschwinden lassen? Denn dann mache ich die Lösung mit dem Button. Ich will nur nicht, dass der Benutzer dann zwei Möglichkeiten zum Aussteigen hat. Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 20. Nov. 2007 19:45 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
|
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 20. Nov. 2007 23:54 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
Hallo Peter, 1. Die einfache Variante, das Schließenkreuz mit VBA - Bordmitteln ausschalten: Code: Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) Cancel = CloseMode <> vbFormCode End Sub
2. Schließenkreuz per API deaktivieren: Code: Option ExplicitPrivate Declare Function DeleteMenu Lib "user32.dll" ( _ ByVal hMenu As Long, _ ByVal nPosition As Long, _ ByVal wFlags As Long) As Long Private Declare Function DrawMenuBar Lib "user32.dll" ( _ ByVal hwnd As Long) As Long Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function GetSystemMenu Lib "user32.dll" ( _ ByVal hwnd As Long, _ ByVal bRevert As Long) As Long Private Const GC_CLASSNAMEMSFORM = "ThunderDFrame" Private Const MF_BYCOMMAND = &H0 Private Const SC_CLOSE = &HF060 Private Sub UserForm_Activate() Dim hWndForm As Long, hWndMenu As Long hWndForm = FindWindow(GC_CLASSNAMEMSFORM, Me.Caption) If hWndForm <> 0 Then hWndMenu = GetSystemMenu(hWndForm, 0&) If hWndMenu <> 0 Then DeleteMenu hWndMenu, SC_CLOSE, MF_BYCOMMAND DrawMenuBar hWndForm End If End If End Sub
3. Schließenkreuz per API löschen: Code: Option ExplicitPrivate Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare Function DrawMenuBar Lib "user32.dll" ( _ ByVal hWnd As Long) As Long Private Const GWL_STYLE = -&H10 Private Const WS_SYSMENU = &H80000 Private Const GC_CLASSNAMEMSFORM = "ThunderDFrame" Private Sub UserForm_Activate() Dim hWndForm As Long hWndForm = FindWindow(GC_CLASSNAMEMSFORM, Me.Caption) If hWndForm <> 0 Then SetWindowLong hWndForm, GWL_STYLE, GetWindowLong(hWndForm, GWL_STYLE) And Not WS_SYSMENU DrawMenuBar hWndForm End If End Sub
4. Im Prinzip das selbe wie Carsten vorschlägt: Code: Option ExplicitPrivate Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _ ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare Function DrawMenuBar Lib "user32.dll" ( _ ByVal hWnd As Long) As Long Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _ ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any) As Long Private Declare Function ReleaseCapture Lib "user32.dll" () As Long Private Const GC_CLASSNAMEMSFORM = "ThunderDFrame" Private Const GWL_STYLE = -16& Private Const WS_CAPTION = &HC00000 Private Const HTCAPTION = 2& Private Const WM_NCLBUTTONDOWN = &HA1 Private hWndForm As Long Private Sub UserForm_Activate() hWndForm = FindWindow(GC_CLASSNAMEMSFORM, Me.Caption) If hWndForm <> 0 Then SetWindowLong hWndForm, GWL_STYLE, GetWindowLong(hWndForm, GWL_STYLE) And Not WS_CAPTION DrawMenuBar hWndForm End If End Sub
------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nepumuk Mitglied Entwicklungsleiter
Beiträge: 351 Registriert: 16.10.2004
|
erstellt am: 21. Nov. 2007 00:07 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
Hi, einen hätte ich noch. Die Maus auf dem Userform beschränken, so dass du die Titelleiste gar nicht anklicken könntest. Das habe ich aber nicht fertig. Willst du den Code dazu? ------------------ Gruß Nepumuk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 21. Nov. 2007 05:10 <-- editieren / zitieren --> Unities abgeben:
|
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 21. Nov. 2007 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für pistolpete1
kapier ich nicht ich habe jetzt testweise 2 formulare mit je einen Button erstellt FRMmain Private Sub CommandButton1_Click() Me.hide frmTEST.Show vbModal Me.Show End Sub FRMtest
Private Sub CommandButton1_Click() Dim ss As AcadSelectionSet Set ss = ThisDrawing.SelectionSets.Add("test1") Me.hide ss.SelectOnScreen Me.Show End Sub
Funmktioniert genauso, wie du es haben willst. ------------------ Ing. Anton Fuchs WWW.FFZELL.AT.TC Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 21. Nov. 2007 19:41 <-- editieren / zitieren --> Unities abgeben:
Hallo fuchsi! Ich habe dein Beispiel jetzt getestet und du hast recht, es funktioniert. Ich habe es gestern abend mit meinem Beispiel probiert und es ging nicht, aber anscheinend lag der Fehler wo anders. Ich habe mich inzwischen für die andere Methode mit einem "Close"-Button entschieden, aber trotzdem danke für deine Bemühungen! Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 21. Nov. 2007 19:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Nepumuk und Carsten! Euer Beispiel funktioniert ebenfalls perfekt und ich habe es gleich eingebaut!! Danke Ich bin so frei und verweise nochmal auf einen anderen Post von mir, der mir Kopfschmerzen bereitet. wenn ihr auch keine Lösung wisst, dann muss ich zu den Zeichnern sagen, dass es so nicht geht: http://ww3.cad.de/foren/ubb/Forum259/HTML/001309.shtml Könnt ihr mir bitte noch schnell sagen, was ich anstelle einer TextBox noch verwenden kann? Das Eingabefeld erstreckt sich über mehrere Zeilen und ich glaube dafür eignet sich eine TextBox nicht unbedingt, oder? Liebe Grüße Peter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 21. Nov. 2007 19:50 <-- editieren / zitieren --> Unities abgeben:
|