naam besturingselement

Status
Niet open voor verdere reacties.

JelleKoen

Gebruiker
Lid geworden
30 okt 2012
Berichten
58
Ik heb de naam van diverse besturingselementen nodig om een procedure uit te voeren:

Private Sub btnSchakelbordQrr__MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
prcMouseOverButtons btnSchakelbordQrr_
End Sub

Ik zou het liever zo willen, maar dat werkt dus niet

Private Sub btnSchakelbordQrr__MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
prcMouseOverButtons commandbutton.name 'de naam van de button
End Sub

Is hier een oplossing voor?
 
Leg eerst eens uit wat de bedoeling is, want ik snap er niks van. Wil je de ene knop de andere laten uitvoeren? Kloppen je functies dan wel?
 
Ik wil o.a. de commandbutton laten oplichten als de muis erover heen gaat - zie onderstaande code.
Omdat ik het vervelend vind steeds de naam van de cmdButton te kopieren, dacht ik dat het mogelijk zou zijn die met de code op te halen.
Dus bijvoorbeeld van het actuele element
Code:
me.ActiveControl.name

Mijn code nu is
Code:
Private Sub btnSchakelbordQrr__MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    prcMouseOverButtons btnSchakelbordQrr_  [B]'Hier wil ik dus de naam van de cmdbutton als variabele ophalen, opdat ik die niet steeds hoef te kopiëren[/B]
End Sub

In de module
Code:
Sub prcMouseOverButtons( _
    btnButton As CommandButton _
    )
    btnButton.ForeColor = vbRed
    btnButton.FontBold = True
End Sub

In de Detailsectie van het formulier
Code:
Private Sub Details_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    prcButtonsBlack Me
End sub

En tenslotte in de module
Code:
Sub prcButtonsBlack( _
    frmForm As Form _
    )
    Dim objObject As Object
    For Each objObject In frmForm.Controls
        If TypeOf objObject Is CommandButton Then
            objObject.ForeColor = vbBlack
            objObject.FontBold = False
        End If
    Next
End Sub
 
Twee dingen: je houdt van enigszins onoverzichtelijke code en objectnamen, en je hébt de juiste techniek al gevonden :). Dan zul je de volgende code ook wel snappen en kunnen toepassen.

Code:
Private Sub Knop50_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    prcMouseOverButtons Me.Knop50
End Sub

Code:
Private Sub Knop51_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    prcMouseOverButtons Me.Knop51
End Sub

Private Sub Knop52_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
prcMouseOverButtons Me.Knop52
End Sub

Code:
Function prcMouseOverButtons(btn As CommandButton)
Dim ctl As Control
    For Each ctl In Me.Controls
        If TypeOf ctl Is CommandButton Then
            ctl.ForeColor = vbBlack
            ctl.FontBold = False
        End If
    Next ctl
    btn.ForeColor = vbRed
    btn.FontBold = True
End Function

En vooral geen code hangen aan de Detail sectie bij muisverplaatsen, want het kreng blijft bezig....
 
Dank voor je reactie. Een mooie oplossing!
Maar begrijp ik nu dat er geen antwoord is op mijn vraag, omdat je de naam van het element nl. ook in de code typt. ('Me.Knop50')?

De naamgeving is inderdaad cryptisch, maar wel functioneel.
bijvoorbeeld: "btnSchakelbordQrr_"
Ik heb de eerste drie letters gebruikt conform de 'Leszynski Naming Convention', waarbij 'btn' staat voor Button.
De achterste vier letters gebruik ik om de forms liquid te maken. Het formulier doorloopt bij laden een routine waarin elk element wordt uitgelijnd op drie secties.
'Qrr_' staat dan bij mij voor liQuid, Rechts, Rechts, "", waardoor het element bij het laden het meest rechts wordt geplaatst.
Scheelt een stuk in de uitlijning.:)
 
Ach, het laatst geraarkte element blijft nog rood en vet met jouw code
 
Klopt. Als je dat niet wilt, kun je onder de knoppen vakken maken die net wat groter zijn dan de knoppen zijn, en daar ook de actie achter hangen die je anders aan de detailsectie zou hebben gezet. Da's altijd nog beter dan de hele detailsectie aan het werk houden.
 
Overigens vind ik het een beetje onzinnig allemaal, want je kunt het grotendeels al instellen op de knoppen zelf, zonder te programmeren. Het zou mij veuls te veul moeite zijn, en zeker in het kader [geÏnvesteerde tijd] = [rendement]. Dat laatste is namelijk 0 in mijn ogen :). Maar als je tijd over hebt, dan zijn dit wellicht leuke opvullertjes :D.
 
Inderdaad heb ik 's-avonds wel wat tijd, ja.
Op de knoppen zelf? Hoe dan?
Maar mijn vraag was..
 
Maar mijn vraag was..
Toch opgelost? Om de knoppen te herstellen (dus niet de laatste knop een kleur laten) zou je onder elke knop een vierkant kunnen zetten (in dezelfde kleur als de ondergrond) en daar een MouseMove actie aan hangen. Dan blijft je detailsectie schoon, en heb je toch eht gewenste resultaat.
 
De mousemove actie is dankzij jouw code verbeterd. Nogmaals dank.
Maar het ging mij om het ophalen van de naam van de button in een variabele, opdat ik dezelfde coderegel in alle button-elementen kan plakken en dus niet telkens de naam van het afzonderlijke element hoef te kopiëren of met Me. hoef op te halen.

Zoals ik schreef:
Code:
Private Sub btnSchakelbordQrr__MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    prcMouseOverButtons Me.btnSchakelbordQrr_  'Hier wil ik dus de naam van de cmdbutton als variabele ophalen, opdat ik die niet steeds hoef te kopiëren
    'Dus zoiets
    prcMouseOverButtons Me.Ditelement.name
End Sub
 
Je krijgt alleen maar meer regels code als je dat wilt. Wat is daar het voordeel van? Bovendien lukt dat niet met Me.object.Name, en ook niet met me.ActiveControl.name (wat je zou verwachten) of met Screen.ActiveControl.name (wat het juiste commando blijkt te zijn). Je hebt altijd al een functieregel staan, (Sub btnSchakelbordQrr__MouseMove bijvoorbeeld) waar de naam in staat; die kun je er zo uitplukken met de muis. En de functie heb je altijd al.
 
Ik zie dat het niet mogelijk is. Beide .ActiveControl had ik inderdaad ook gevonden en gezien dat die niet naar de muisaanwijzer verwijzen.
Dank voor je hulp. Ik sluit nu deze discussie.
 
Vandaag begreep ik je opmerking: "Overigens vind ik het een beetje onzinnig allemaal, want je kunt het grotendeels al instellen op de knoppen zelf, zonder te programmeren." In een oudere database zag ik dat de buttons oplichten wanneer de cursor eroverheen ging. Ook als ik een nieuwe maak, lichten de buttons op.

In beide databases staat de Button-eigenschap onder Overige en "Cursor bij aanwijzen" op standaard. Omdat alle buttons in mijn database niet oplichten, heb ik gedacht dat het Formulier zelf een soortgelijke eigenschap kent, maar iets wat daar op leek, kwam ik niet tegen.
Enig idee waarom de 'oplichting' weigert?
 
Knoppen hebben 4 statussen waarmee je een kleur kunt veranderen:
1. Kleur bij aanwijzen
2. Kleur indien ingedrukt
3. Voorgrondkleur bij aanwijzen
4. Voorgrondkleur bij ingedrukt

Daarnaast kun je de achtergrond- en voorgrondkleur instellen; dit is de kleur die je ziet als de muis niet in de buurt is. Dus in beginsel 3 verschillende knoppen: gewoon, muis hangt er boven en muis is ingedrukt. Die kleurinstelling kan er dan zo uitzien: "Achtergrond 2, Donkerder 50%" of zo: "#0B87D6" (zelfde kleur, maar nu in Hexadecimale waarde).
Je database heeft wellicht niet de juiste indeling; hij moet wel in het accdb format zijn.
 
Ik heb 'm.
De eigenschappen zijn niet zichtbaar in Access2007, maar als je kiest voor
'Besturingselementen met Windows-thema's gebruiken in formulieren' onder Opties voor Access, Huidige database, dan worden ze opgelicht.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan