Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

www.donkarl.com?FAQ4.28 - Steuerelement in den Hintergrund per VBA

610 views
Skip to first unread message

John Curio

unread,
Aug 5, 2008, 7:44:38 AM8/5/08
to
Moin, Moin,

würde gerne ein Steuerelement per VBA - Programmierung in den Hintergrund
bzw. in den Vordergrund setzen, damit meine SteuerelementTip-Texte sichtbar
werden. Habe da keinen VBA-Befehl gefunden :-(
@Danke Karl für www.donkarl.com?FAQ4.28.

Grüße
Johannes


Gunter Avenius

unread,
Aug 5, 2008, 7:53:41 AM8/5/08
to
Hallo John Curio,

John Curio schrieb folgendes:


> würde gerne ein Steuerelement per VBA - Programmierung in den Hintergrund
> bzw. in den Vordergrund setzen, damit meine SteuerelementTip-Texte sichtbar
> werden. Habe da keinen VBA-Befehl gefunden :-(

Formular in der Entwurfansicht öffnen und dann folgender Code:
DoCmd.RunCommand acCmdBringToFront
DoCmd.RunCommand acCmdSendToBack

Gruß
Gunter
--
__________________________________________________________
Access FAQ: http://www.donkarl.com
home: http://www.avenius.com - http://www.AccessRibbon.de
http://www.ribboncreator.de

Thomas Winkler

unread,
Aug 5, 2008, 8:07:59 AM8/5/08
to
Hi,

Was ist mit dem Alternativen

Me!DeinControl.ToolTipText = "" bzw.
Me!DeinControl.Visible = False

????

Thomas

--
"Access? Damit arbeite ich nicht. Das ist doch nur ein abgespecktes Excel."

John Curio

unread,
Aug 5, 2008, 8:48:25 AM8/5/08
to
Hi Thomas,

>> würde gerne ein Steuerelement per VBA - Programmierung in den Hintergrund
>> bzw. in den Vordergrund setzen, damit meine SteuerelementTip-Texte
>> sichtbar werden. Habe da keinen VBA-Befehl gefunden :-(
>> @Danke Karl für www.donkarl.com?FAQ4.28.
>
> Was ist mit dem Alternativen
>
> Me!DeinControl.ToolTipText = "" bzw.
> Me!DeinControl.Visible = False
>

(Leider) liegt vor meinen Buttons ein unsichtbares Rechteck, deshalb geht
das mit dem Tip-Text nicht.
siehe www.donkarl.com?FAQ4.28

Deshalb bringt mir Dein Vorschlag leider wenig.

Trotzdem Danke!
Johannes


John Curio

unread,
Aug 5, 2008, 8:57:34 AM8/5/08
to
Hi Gunter,

>> würde gerne ein Steuerelement per VBA - Programmierung in den Hintergrund
>> bzw. in den Vordergrund setzen, damit meine SteuerelementTip-Texte
>> sichtbar
>> werden. Habe da keinen VBA-Befehl gefunden :-(
>
> Formular in der Entwurfansicht öffnen und dann folgender Code:
> DoCmd.RunCommand acCmdBringToFront
> DoCmd.RunCommand acCmdSendToBack
>

Danke, aber ich will genau ein Rechteck in den Hintergrund setzen. Wie kann
ich das Steuerelement konkretisieren?
Dazu kommt, dass ich für eine RunTime programmiere, welche - so weit ich
weiss - keine Entwurfsansicht kennt.

Viele Grüße
Johannes


Olaf O.

unread,
Aug 5, 2008, 9:37:01 AM8/5/08
to
Hallo Johannes!

Du verweist auf DonKarl - wieso beherzigst Du nicht seinen Ratschlag?
Hat es einen Sinn, dass Du generell das Rechteck vor den Buttons lässt?

Thomas Winkler

unread,
Aug 5, 2008, 9:54:46 AM8/5/08
to
Hi,

> (Leider) liegt vor meinen Buttons ein unsichtbares Rechteck, deshalb geht
> das mit dem Tip-Text nicht.

Welchen Zweck hat das unsichtbare Rechteck? Soll es nur den Button
verstecken?
Glaube Du gehst hier beim Formular-Design falsch vor.

John Curio

unread,
Aug 5, 2008, 10:23:26 AM8/5/08
to
Hi Thomas,

>> (Leider) liegt vor meinen Buttons ein unsichtbares Rechteck, deshalb geht
>> das mit dem Tip-Text nicht.
>
> Welchen Zweck hat das unsichtbare Rechteck? Soll es nur den Button
> verstecken?
> Glaube Du gehst hier beim Formular-Design falsch vor.

freue mich auf Deinen Vorschlag:
Versende Fragebögen über Access und Word. 3 Buttons sind für "Fragebogen
erneut senden", "erinnerungschreiben senden" und "fragebogen zurück".
Wenn nun ein paar Voraussetzungen nicht stimmen, z.B. Adresse nicht
vollständig, dann sollen auf Wunsch des Kunden die 3 Buttons "versteckt"
werden und statt dessen ein Button "Korrektur" angezeigt werden.

im Load-Ereignis mache ich also das "Korrektur-Rechteck" und den
"korrektur-Button" sichtbar bzw. unsichtbar.

Wie würdest Du das lösen? Bin gespannt :-)

Gruss
Johannes


Jens Schilling

unread,
Aug 5, 2008, 10:38:38 AM8/5/08
to
Hallo, John

John Curio wrote:
> ..... dann sollen auf Wunsch des Kunden die


> 3 Buttons "versteckt" werden und statt dessen ein Button "Korrektur"
> angezeigt werden.
> im Load-Ereignis mache ich also das "Korrektur-Rechteck" und den
> "korrektur-Button" sichtbar bzw. unsichtbar.
>
> Wie würdest Du das lösen? Bin gespannt :-)

So, wie der Kunde es verlangt...

Die drei Button ausblenden, also nicht sichtbar machen ( visible ) und den
einen anderen Button einblenden.
Vermutlich lägen bei mir der rechte der drei Button und der Korrektur-Button
deckungsgleich übereinander ...

Warum ein Rechteck beteiligt ist, ist mir nach Deinen Schilderungen auch
nicht klar.

Gruss
Jens


Thomas Winkler

unread,
Aug 5, 2008, 10:47:22 AM8/5/08
to
Hi,

> freue mich auf Deinen Vorschlag:
> Versende Fragebögen über Access und Word. 3 Buttons sind für "Fragebogen
> erneut senden", "erinnerungschreiben senden" und "fragebogen zurück".
> Wenn nun ein paar Voraussetzungen nicht stimmen, z.B. Adresse nicht
> vollständig, dann sollen auf Wunsch des Kunden die 3 Buttons "versteckt"
> werden und statt dessen ein Button "Korrektur" angezeigt werden.
>
> im Load-Ereignis mache ich also das "Korrektur-Rechteck" und den
> "korrektur-Button" sichtbar bzw. unsichtbar.
>
> Wie würdest Du das lösen? Bin gespannt :-)

Wenn Du nun schon ein "Korrektur-Rechteck" ein- bzw. ausblendest gehe
ich davon aus, dass Du das mit der Eigenschaft:

Rechteck.Visible = True oder False

regelst. Warum um alles in der Welt sollte ein Button diese Eigenschaft
dann nicht selbst unterstützen?

Ich würde 4 Buttons anlegen, von denen entweder die o.g. *drei*
gleichzeitig oder eben nur der *eine* Korrektur-Button angezeigt werden.

Warum aber behandelst Du das Button ein-/ausblenden im Load-Ereignis?
Ich denke, dass er in Form_Current besser aufgehoben wäre ála:

Private Sub Form_Current()
Dim blnModus as Boolean

blnModus = FunktionDiePrüftObAllesDaIsWasDaSeinSoll()

Me!cmd_Fragebogen_erneut_senden.Visible = blnModus
Me!cmd_erinnerungschreiben_senden.Visible = blnModus
Me!cmd_fragebogen zurück.Visible = blnModus

Me!cmd_Korrektur.Visible = Not blnModus
End Sub

HTH

Michel Fouquet

unread,
Aug 5, 2008, 10:55:41 AM8/5/08
to
Hallo,

Jens Schilling schrieb:


> John Curio wrote:
>> ..... dann sollen auf Wunsch des Kunden die
>> 3 Buttons "versteckt" werden und statt dessen ein Button "Korrektur"
>> angezeigt werden.
>

> Die drei Button ausblenden, also nicht sichtbar machen ( visible ) und den
> einen anderen Button einblenden.
> Vermutlich lägen bei mir der rechte der drei Button und der Korrektur-Button
> deckungsgleich übereinander ...
>
> Warum ein Rechteck beteiligt ist, ist mir nach Deinen Schilderungen auch
> nicht klar.

wobei ich grundsätzlich kein Freund davon bin, Dinge ein- und
auszublenden. Sofern es (z.B. aus Platzgründen) machbar ist, bevorzuge
ich das Aktivieren und Deaktivieren von Steuerelementen.

So kennt man alle vorhandenen Möglichkeiten und hat nicht mit
wechselnden Formularlayouts zu tun.

Gruß,
Michel

Jens Schilling

unread,
Aug 5, 2008, 11:03:21 AM8/5/08
to
Hallo, Michel

Michel Fouquet wrote:
> Jens Schilling schrieb:
>> John Curio wrote:
>>> ..... dann sollen auf Wunsch des Kunden die
>>> 3 Buttons "versteckt" werden und statt dessen ein Button "Korrektur"
>>> angezeigt werden.
>>
>> Die drei Button ausblenden, also nicht sichtbar machen ( visible )
>> und den einen anderen Button einblenden.
>> Vermutlich lägen bei mir der rechte der drei Button und der
>> Korrektur-Button deckungsgleich übereinander ...
>>
>> Warum ein Rechteck beteiligt ist, ist mir nach Deinen Schilderungen
>> auch nicht klar.
>
> wobei ich grundsätzlich kein Freund davon bin, Dinge ein- und
> auszublenden. Sofern es (z.B. aus Platzgründen) machbar ist, bevorzuge
> ich das Aktivieren und Deaktivieren von Steuerelementen.

Da bin ich völlig bei Dir !
Aber, ich hab' den Wunsch des Kunden bewusst in meinem Quote belassen; ich
hatte ebenfalls Situationen, wo "König Kunde" seine Vorstellungen
durchsetzen wollte, und solche Dinge gehören nicht zu denen, um die *lange*
streite.

Tschüs
Jens


John Curio

unread,
Aug 5, 2008, 11:42:52 AM8/5/08
to
danke allen,

aber leider es sind nicht nur 3 Buttons, sondern 10 Buttons, 3 Rechtecke und
9 Textfelder, die verdeckt werden sollten. Deshalb ein Rechteck, welches mit
das abnimmt als 22 Elemente auszublenden.
da komme ich wohl jetzt nicht drum rum - schade. Dachte, das mit dem
Vordergrund geht.

Viele grüße
Johannes


Jens Schilling

unread,
Aug 5, 2008, 11:53:45 AM8/5/08
to
Hallo, John

John Curio wrote:
> aber leider es sind nicht nur 3 Buttons, sondern 10 Buttons, 3
> Rechtecke und 9 Textfelder, die verdeckt werden sollten. Deshalb ein
> Rechteck, welches mit das abnimmt als 22 Elemente auszublenden.
> da komme ich wohl jetzt nicht drum rum - schade. Dachte, das mit dem
> Vordergrund geht.

Stellt sich die Frage, warum Du das nicht von vornherein schilderst; manches
Posting wäre überflüssig gewesen.

Gruss
Jens


Thomas Winkler

unread,
Aug 5, 2008, 12:41:37 PM8/5/08
to
Hi,

> aber leider es sind nicht nur 3 Buttons, sondern 10 Buttons, 3 Rechtecke und
> 9 Textfelder, die verdeckt werden sollten. Deshalb ein Rechteck, welches mit
> das abnimmt als 22 Elemente auszublenden.
> da komme ich wohl jetzt nicht drum rum - schade. Dachte, das mit dem

1. Man kann alle Controls auch automatisch durchlaufen lassen:

dim ctl as access.control

for each ctl in me.controls
ctl.Visible = True|False
next ctl

2. Wenn sich das Layout des Formulars sich in *einem* Fall soooo
gravierend vom Layout im *anderen* Fall unterscheidet, dann bietet sich
auch an, je nach Bedarf ein anderes Unterformular in das UFO-Control zu
laden:

If <allesOK> Then
Me!ufo_Control.SourceObject = "normales Formular"
Else
Me!ufo_Control.SourceObject = "Form, auf dem nur ein
'Korrigieren'-Button ist"
endif

So wie Du es bisher machst ist es einfach nur dilettantisch.

Denk' mal drüber nach, was passiert, wenn der User mittels Tastatur
(Tab, Enter, usw.) navigiert...
Dann kommt er auf Deine "gesperrten" Buttons und...boooooooom...

Thomas Möller

unread,
Aug 5, 2008, 1:02:24 PM8/5/08
to
Hallo Thomas,

Thomas Winkler schrieb:


>> aber leider es sind nicht nur 3 Buttons, sondern 10 Buttons, 3
>> Rechtecke und 9 Textfelder, die verdeckt werden sollten. Deshalb ein
>> Rechteck, welches mit das abnimmt als 22 Elemente auszublenden.
>> da komme ich wohl jetzt nicht drum rum - schade. Dachte, das mit dem
>
> 1. Man kann alle Controls auch automatisch durchlaufen lassen:
>
> dim ctl as access.control
>
> for each ctl in me.controls
> ctl.Visible = True|False
> next ctl

ergänzend könnte man noch auf den Typ des Steuerelements abfragen:

If ctl.ControlType = acCommandButton Then

Wenn man dann noch in der Eigenschaft "Tag" speichert, zu welcher Gruppe
das Element gehört, lässt sich das Ein- und Ausblenden ohne viel
langweiligen VBA-Code schnell erledigen:

- - 8< - - 8< - - 8< - -

For Each ctl in Me.Controls
If ctl.ControlType = acCommandButton
Select Case ctl.Tag
Case "Ausblenden"
ctl.Visible = False
Case "Einblenden"
ctl.Visible = True
End Select
End If
Next ctl

- - 8< - - 8< - - 8< - -

CU
--
Thomas

Homepage: www.Team-Moeller.de

Matthias Körner

unread,
Aug 6, 2008, 2:42:26 AM8/6/08
to
Hallo Johannes,

"John Curio" <J_C...@gmx.de> schrieb im Newsbeitrag
news:eeY%23tHx9I...@TK2MSFTNGP06.phx.gbl...

ich habe das von Dir geschilderte Problem auch mal gehabt und wie folgt
gelöst:

Der gewünschte Zustand der Felder wird über eine Prozedur gesteuert, die je
nach gewünschtem Zustand abgewfragt wird.
Damit die TipTexte funtionieren, muss das Rechteck immer im Hintergrund
liegen.
Der Trick dabei ist, jeweils 2 deckungsgleiche Rechtecke zu verwenden. Eins
hinter den Buttons, eins vor den Buttons.
Das Rechteck hinter den Buttons ist immer sichtbar. zum Aus-/Einblenden der
Buttons ist nur das davor liegende Rechteck auf Visible = True bzw. False zu
setzen.
Die betroffenen Textfelder/Buttons sind auf Enable = True bzw. False zu
setzen.

Beispiel:
Private Function SetFieldStatus(FStatus As Long)
Select Case FStatus
Case 1
Me!Rechteck1.Visible = False
Me!Rechteck2.Visible = True
Me!Feld1.Enabled = True
Me!Feld2.Enabled = True
Me!Button1.Enabled = True
Me!Button2.Enabled = True
Me!Feld3.Enabled = False
Me!Feld4.Enabled = False
Me!Button3.Enabled = False
Me!Button4.Enabled = False
Case 2
Me!Rechteck1.Visible = True
Me!Rechteck2.Visible = False
Me!Feld1.Enabled = False
Me!Feld2.Enabled = False
Me!Button1.Enabled = False
Me!Button2.Enabled = False
Me!Feld3.Enabled = True
Me!Feld4.Enabled = True
Me!Button3.Enabled = True
Me!Button4.Enabled = True
End Select
End Function

HTH
Matthias


Thomas Winkler

unread,
Aug 6, 2008, 3:12:49 AM8/6/08
to
Hi,

ohne Dir jetzt zu nahe treten zu wollen - Deine Lösung ist absoluter Murks.

> Der gewünschte Zustand der Felder wird über eine Prozedur gesteuert, die je
> nach gewünschtem Zustand abgewfragt wird.
> Damit die TipTexte funtionieren, muss das Rechteck immer im Hintergrund
> liegen.
> Der Trick dabei ist, jeweils 2 deckungsgleiche Rechtecke zu verwenden. Eins
> hinter den Buttons, eins vor den Buttons.
> Das Rechteck hinter den Buttons ist immer sichtbar. zum Aus-/Einblenden der
> Buttons ist nur das davor liegende Rechteck auf Visible = True bzw. False zu
> setzen.
> Die betroffenen Textfelder/Buttons sind auf Enable = True bzw. False zu
> setzen.

Wenn Du dann doch jeweils die Textfelder/Buttons nochmal anfassen musst,
kannst Du sie auch gleich auf Visible = True|False setzen.

<metapher>
Ich habe auch mal Räder wechseln wollen, und habe es wie folgt gemacht.
Zuerst einen Kran bestellen. Mit diesem Kran kann man das Auto leicht
umdrehen (auf's Dach legen). Dann kann man sehr einfach und ganz ohne
Wagenheber die Räder wechseln - und man muss sich nicht mal bücken.
</metapher>

HTH

Michel Fouquet

unread,
Aug 6, 2008, 4:02:52 AM8/6/08
to
Hallo,

Matthias Körner schrieb:


> Der Trick dabei ist, jeweils 2 deckungsgleiche Rechtecke zu verwenden. Eins
> hinter den Buttons, eins vor den Buttons.
> Das Rechteck hinter den Buttons ist immer sichtbar. zum Aus-/Einblenden der
> Buttons ist nur das davor liegende Rechteck auf Visible = True bzw. False zu
> setzen.

und der nächste kommt uns dann mit dem Ansatz, doch generell jedes
Steuerelement (mit Ausnahme der Rechtecke natürlich) als Sandwich zu
gestalten: jeweils mit einem davor- und einem dahinterliegenden Rechteck?!

Es stehen, wie bereits im Thread teilweise schon dargelegt, verschiedene
"traditionelle" Möglichkeiten - ggf. auch in Kombination miteinander -
zur Verfügung. Das wären z.B.:

- das betreffende Steuerelement per visible und/oder enabled freizuschalten
- verschiedene Buttons übereinanderstapeln und bei Bedarf in den
Vordergrund holen
- Buttons jeweils nur mit anderer Beschriftung zu versehen und per Flag
o.ä. deren Aktion steuern
- Unterformulare (ggf. eben nur mit den benötigten Buttons) verwenden
- über Optionsgruppen und/oder Kombifelder eine Vorauswahl der möglichen
Aktionen steuern
- ein Kombifeld mit allen jeweils zulässigen Aktionen und einem
danebenliegenden Button "Ausführen" verwenden
- den Formularaufbau insgesamt überdenken (weg von der eierlegenden
Wollmilchsau). Ein System der schrittweisen Verarbeitung (wie z.B. bei
den Assistenten) über das Registersteuerelement - mit ausgeblendeten
Registern - in Betracht ziehen

Dies "ich hab' da schon... (und will nicht ändern)" und "der Kunde will
das so..." ist einem kreativen Umgang abträglich. Wenn man sich die
tatsächlichen (ggf. eben auch papiernen) Arbeitsabläufe mal genau
anschaut und mit den Betroffenen durchspricht, kommt man oft zu
erstaunlich anderen Ergebnissen, als man es sich so zusammengereimt hat.
(Den guten Willen will ich Entwickler und Auftraggeber dabei gar nicht
absprechen).

Meine hauptsächlichen Werkzeuge beim Prototyping waren schon immer:
Papier, Bleistift ("Hä?!") und Radiergummi ("Hä?!") bzw. wasserlösliche,
farbige Folienstifte für den Overheadprojektor.

Wer die Gelegenheit hat, da mal reinzuschauen, sollte es tun:
Carolyn Snyder
Paper Prototyping
The Fast and Easy Way to Design and Refine User Interfaces
Morgan Kaufmann Publishers

Gruß,
Michel

Matthias Körner

unread,
Aug 6, 2008, 4:00:08 AM8/6/08
to
Hallo Thomas,

"Thomas Winkler" <nos...@mail.me> schrieb im Newsbeitrag
news:OpHBXP59...@TK2MSFTNGP05.phx.gbl...


>
> ohne Dir jetzt zu nahe treten zu wollen - Deine Lösung ist absoluter
> Murks.
>

Naja, eine vorgeschlagene Lösung auf den ersten Blick als "absoluten Murks"
abzutun, würde ich persönlich mir eigentlich eher verkneifen...

>
> Wenn Du dann doch jeweils die Textfelder/Buttons nochmal anfassen musst,
> kannst Du sie auch gleich auf Visible = True|False setzen.
>

Aufgrund Deines Kommentars habe ich mir das betreffende Form nochmal näher
angeschaut.

Der Grund, warum ich das damals mit dem "Enabled" gemacht habe, lag daran,
dass auch die verdeckten Felder teilweise bereits beim Form Load mit Werten
gefüllt werden mussten. Und bei Visible=False wäre das nicht so einfach mit
einem Einzeiler möglich geween.

Von daher gesehen ist Deine Anmerkung natürlich i.O. ;-)

Gruß
Matthias


Michel Fouquet

unread,
Aug 6, 2008, 4:22:52 AM8/6/08
to
Hallo Matthias,

Matthias Körner schrieb:


> Naja, eine vorgeschlagene Lösung auf den ersten Blick als "absoluten Murks"
> abzutun, würde ich persönlich mir eigentlich eher verkneifen...

du wurdest heute zum "Watschenmann des Tages" erkoren! Trag es mit
Fassung - es geht auch wieder vorbei! :-)

Gruß,
Michel

ThomasO

unread,
Aug 6, 2008, 4:37:25 AM8/6/08
to
Moin.

> Der Grund, warum ich das damals mit dem "Enabled" gemacht habe, lag daran,
> dass auch die verdeckten Felder teilweise bereits beim Form Load mit Werten
> gefüllt werden mussten. Und bei Visible=False wäre das nicht so einfach mit
> einem Einzeiler möglich geween.

Warum kannst Du ein unsichtbares Feld nicht mit Werten füllen? Wer
erzählt Dir solchen Humbug??? Oder hab ich was verpasst? Also, bei mir
funktioniert das immer wunderbar... ;o)

Ob Du nun das Control deaktivierst (enabled=false) oder unsichtbar
machst (visible=false), sowohl die ControlSource, als auch zugewiesene
(eingelesene) Werte werden immer dargestellt. Verstehe jetzt gerade
das Problem nicht!?!?!?

Gruss
Thomas

Matthias Körner

unread,
Aug 6, 2008, 4:46:32 AM8/6/08
to
"Michel Fouquet" <MaPoubel...@orange.fr> schrieb im Newsbeitrag
news:6ft546F...@mid.individual.net...

kein Problem, ein Rheinländer steckt das locker weg ;-)))

Und bestimmt nicht umsonst steht schon in der Bibel der Spruch:
"Wenn dir jemand auf die rechte Backe haut, dann halte ihm auch noch die
linke hin..."

Gruß
Matthias


Matthias Körner

unread,
Aug 6, 2008, 5:17:23 AM8/6/08
to
Hallo Thomas,

"ThomasO" <thomas.ob...@tuev-seminare.de> schrieb im Newsbeitrag
news:2f7ed6ce-ccaa-4874...@a70g2000hsh.googlegroups.com...
Moin.

ich versuche, das noch mal nachzuvollziehen, ist nämlich schon eine Weile
her...

Einige der Felder waren ungebunden und wurden beim FormLoad mit Werten
gefüllt, die abhängig von bestimmten Werten des zugrunde liegenden
Datensatzes waren.
Beim notwendigen Requery nach jedem Ein-/Ausblenden dieser Felder hätten die
eingetragenen Werte nochmals ermittelt und die Felder erneut befüllt werden
müssen.
Zusätzlich liefen im Hintergrund Berechnungen, die sich zum Teil auch auf
die verdeckten Felder bezogen. Diese hätten dann auch nach jedem Requery neu
gestartet werden müssen.

Du kannst mir glauben, ich habe damals wirklich alles mögliche probiert, und
das Letzte, was ich üblicherweise einsetze, sind Rechtecke zum Verdecken von
irgendwelchen Feldern oder Buttons. Aber die letztendlich gewählte Lösung
war für den damaligen Zweck die effektivste...

Hoffe, meine Erklärungsversuche waren einigermaßen für Dich nachvollziehbar
;-)

Gruß
Matthias


0 new messages