PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VBA - Position einer UserForm an eine andere übergeben?


Popopinsel
2008-08-27, 18:43:22
Hallo zusammen,

folgende Situation: Ich habe mehrer UserFormen, welche mittels CommandButtons von einer Haupt-UserForm aus aufgerufen werden. Z.Z. habe ich das mittels .Hide und .Show realisiert.

Nun möchte ich aber, dass wenn ich eine der UserFormen verschiebe, diese aktuelle Position an die nächste geöffnete UF übergeben wird. Dh. die neue UF positioniert sich immer exakt dort, wo die vorige geschlossen wurde.

Kann mir da einer bei helfen? Danke!

RattuS
2008-08-28, 01:23:18
Richte eine öffentliche Variable (Point-Struct oder 2x Integer für X/Y) in deiner Hauptform ein und setze beim Schließen deiner anderen Forms diese Variable immer auf die aktuelle Location der zu schließenden Form. Dann brauchst du beim Öffnen einer Form nur die öffentliche Variable abrufen und die Location neu setzen.

Das sieht bei VB etwa so aus (hab gerade kein VS hier, daher Syntax ungenau):


' Hauptform:
Public LetztePosition as new Point(0, 0) ' beim Initialisieren instanzieren, damit du keine Prüfung auf Nothing beim 1. Setzen brauchst

' alle anderen Forms:
Form_Load... ' bzw. Form_VisibleChanged bei Show/Hide
Me.Location = Hauptform.LetztePosition

Form_Closing... ' bzw. FormVisibleChanged -> Hide bei Show/Hide
Hauptform.LetztePosition = Me.Location


Edit: Wahhhhhh da steht ja VBA. >_<

Popopinsel
2008-08-28, 08:51:14
hehe, macht ja nichts, trotzdem danke! ;)

Hab es jetzt rausgefunden, ist eigentlich ziemlich simpel das ganze:

In der (sich automatisch öffnenden) Haupt-UserForm 'uf_menu':

Private Sub UserForm_Initialize()

uf_menu.Left = (Application.Width - uf_menu.Width) / 2
uf_menu.Top = (Application.Height - uf_menu.Height) / 2

End Sub

Hier wird also zunächst die UserForm auf dem Bildschirm zentriert. Das ist notwendig, da man in den Eigenschaften der UserFormen die 'StartUpPosition' auf '0 - Manuell' setzen muss und die UserForm sonst immer im oberen linken Bildschirmrand startet.

Weiterhin in der 'uf_menu':

Private Sub cmd_menu_I_Click()

uf_I.Left = Left
uf_I.Top = Top
Hide
uf_I.Show

End Sub

Hier wird nun der (per Button 'cmd_menu_I') nächsten aufzurufenen UserForm 'uf_I' der aktuelle (d.h. von der 'uf_menu') Wert für 'Top' und 'Left' übergeben. Danach wird die UserForm natürlich noch geschlossen und die neue geöffnet.

Der 'Zurück'-Button in der 'uf_I' (um ins Hauptmenü zurück zu gelangen) sieht dementsprechend so aus:

uf_menu.Top = Top
uf_menu.Left = Left
Hide
uf_menu.Show


Klappt also alles wunderbar, vielleicht hilfts ja noch wem anders! =)

_Gast
2008-08-28, 09:17:00
Das ist notwendig, da man in den Eigenschaften der UserFormen die 'StartUpPosition' auf '0 - Manuell' setzen muss und die UserForm sonst immer im oberen linken Bildschirmrand startet.Und StartUpPosition 1 - Fenstermitte funktioniert nicht?

Popopinsel
2008-08-28, 18:43:53
Und StartUpPosition 1 - Fenstermitte funktioniert nicht?

Nein, dann erscheint die UserForm jedesmal wieder in der Bildschirmmitte.