Button.Visible = False

Status
Niet open voor verdere reacties.

maurann

Gebruiker
Lid geworden
22 jul 2007
Berichten
117
Beste Accessliefhebbers,

Ik zit al enige tijd te klooien op iets wat voor sommigen onder jullie misschien simpel is.
In een formulier wil ik dat enkel in het eerste record een 'button'- knop zichtbaar is. Hoe doe ik dit?
Ik zit te zoeken in de eigenschappen van het formulier en bij het laden wil ik een gebeurtenisprocedure laten werken:
Private Sub Form_Load()
If Me.recordselector = 1
Then Button.Visible = True
Else Button.VIsible = False
End If
End Sub

Dit werkt niet.

Iemand een idee?
Txs.
Maurann
 
Reasons to be cheerful

Beste boundform liefhebber,

Als je een bound form hebt, dan is er een recordset gekoppeld aan je form.
Die recordset is als het meezit gesorteerd. Laten we zeggen op het veld ID.
Het laagste ID komt dus als eerste.
Nu zet je in je OnCurrent event:
Code:
Private Sub Form_Current()
  If Me.ID = DMin("ID","QueryNaamWaarFormAanGekoppeldIs") Then 
    Button.Visible = True
  Else 
    Button.VIsible = False
  End If
End Sub
Je moet dus een referentie punt hebben. Dat is in dit geval je ID in je gesorteerde query. Als je koppelt aan een ongesorteerde tabel dan is niet te zeggen welk record de eerste is.

Enjoy!
 
Bedankt voor 't deskundig advies Guus,

Het werkt, maar toch niet helemaal.

Ik heb van betreffend formulier
2 manieren om het voor te stellen.

Een eerste open ik met de code:
DoCmd.OpenForm "Form", acNormal , , , acFormadd, acDialog (waarbij een leeg formulier kan worden ingevuld welk dan de laatste ID toegekend krijgt, waarbij de button.visible 'true' moet zijn)

De tweede open ik met de code:
DoCmd.OpenForm "Form", acNormal , , , acFormEdit, acDialog (en hier werkt de code; de laatste ID maakt dat de button zichtbaar is, de andere ID's maken de button niet zichtbaar).

Vraag: hoe kan ik in de 'Formadd' de button zichtbaar krijgen ( nochthans
geeft het formulier hier de laatste ID aan (waarbij de code de 'button.visible = true' moet houden, maar dit werkt hier niet), maar de button is niet zichtbaar).

Hopelijk weet je het.

Groeten,

Maurann
 
Welke Access versie gebruik je?

acFormAdd en acFormEdit gebruik ik nooit. Als je die weglaat werkt het namelijk ook. Er is me nog nooit iets niet gelukt.

Om deze discussie de kop in te drukken zou ik willen vragen of je je db wilt posten of een gedeelte waaruit je probleem blijkt.
 
Guus,

Ik gebruik access 2003.
Ik voeg een database toe waaruit het probleem blijkt.


Probleem: als je formulier "klant" opent met knop0 ('acadd') dan zie je knop39 niet.
De knop wordt enkel zichtbaar indien je naar een ander record gaat en dan terug naar betreffende record. Wat ik wil is dat hij onmiddellijk zichtbaar en dus bruikbaar wordt.
Verder zoek ik een methode om de gebruiker te dwingen iets met knop39 te doen.
Indien het formulier wordt gesloten of indien gebruiker naar een andere record wil gaan, zou een bericht moeten verschijnen met iets als een vraagstelling (msgbox gekoppeld aan activatie van knop39).
Maar vind daarvoor niet de juiste syntaxis.

Grtz,

Maurann
 

Bijlagen

Form_Klant code aanpassen

Vervang de code achter Form_Klant met onderstaande tekst. Edit: Of kijk in de attached db.
Code:
Option Compare Database
Option Explicit
' Onderstaand is een stukje voorbeeld code. Het zal niet werken zoals jij dat wilt maar het lijkt me eenvoudig aan te passen
Private Sub Form_Current()

    If Me.Klantnummer = DMax("klantnummer", "QryKlant") Or Nz(Me.Klantnummer, "") = "" Then
        Knop39.Visible = True
    Else
        Knop39.Visible = False
    End If

    If Nz(Me.Klantnummer, "") <> "" Then ' Form is al open en staat op een record
        MsgBox " Naar ander record gaan"
        UnLockControls True
    End If
        

End Sub

Private Sub UnLockControls(blnEnable As Boolean)

    Dim ctl As Control
    
    For Each ctl In Me.Controls
        If ctl.Tag = "LOCKME" Then
            ctl.Enabled = blnEnable
        End If
    Next ctl

End Sub

Private Sub Knop40_Click()

    UnLockControls Not Me.Klantnummer.Enabled

End Sub
Je moet de tags van de controls ook nog aanpassen. die moeten LOCKME worden. Een Tag in het nederlands schijnt "Extra Info" te heten.

Succes!
 

Bijlagen

Bedankt Guus voor 't delen van je expertise.

Ik probeer het uit.
Maar kan je me helpen bij het tweede deel van mijn vraag;
namelijk indien knop39 door de gebruiker niet wordt gebruik wil
ik de gebruiker ertoe dwingen iets met de knop te doen.
Iets in de aard van: 'Je hebt knop39 niet gebruikt, wil je dat of niet?'
Daarvoor kan ik MsgBox gebruiken, daar raak ik (denk ik) wel aan uit.
Maar hoe koppel ik Msgbox aan het al of niet gebruik van knop39 in het
formulier?
Ik vermoed met een If... Then instruktie; maar de juiste syntaxis ontbreekt me.

In afwachting bedankt voor uw reactie,
goeienavond en een zalig weekend.

Maurann
 
Wat kunnen ze verder dan die knop gebruiken en hoe erg is dat?
 
Wat ze verder kunnen doen dan die knop gebruiken?
De knop niet gebruiken.
Wat het programma zou moeten doen is de gebruiker ertoe aanzetten erbij stil te staan waarom hij die knop niet gebruikt heeft, indien hij ze niet gebruikte. Indien hij ze wel gebruikt is 't oké.
Bedoeling is een db te ontwikkelen waarbij bijgehouden wordt hoeveel maal klanten al van diensten gebruik hebben gemaakt. Na 10 gebruiknames van diensten wordt in de 11 de dienst een korting toegekend gebaseerd op het totaal van de 10 voorgaande diensten.
Maar niet alle diensten zullen meetellen voor de toekenning van de korting.
Ook is het goed dat het programma de gebruiker dwingt na te denken over toekennen van de korting, en de klant kan inlichten hoeveel diensten hij nog verwijdert is van de korting.
Dus m'n vraag blijft:
Is 't mogelijk om via die button (knop39), een msgbox in werking te stellen die in communicatie gaat met de gebruiker.

Grtn.

Maurann
 
Definieer een globale boolean of de knop gebruikt is, bijvoorbeeld blnKnop29used.

Initialiseer deze variabele bij het openen van je formulier op False
blnKnop29used = False

Als de knop ingedrukt wordt zet deze variabele dan op True
blnKnop29used = True

Controleer bij het sluiten van je formulier of de knop gebruikt is
If NOT blnKnop29used Then
msgbox "Knoppie niet gebruikt!"
Else
'knoppie wel gebruikt,niets doen
End If
 
Vegeet dan niet dit ook te doen als de applicatie wordt afgesloten
 
't Gaat mijn petje te boven...
Ik begrijp wel de methodiek, maar de concrete vertaling in de applicatie???
Zucht...
Een globale boolean definieren?
En hoe dat doen als de applicatie wordt afgesloten?
Graag meer verduidelijking,
en is daar ergens meer over te lezen zodat ik de taal meer kan leren?

Bedankt,

Maurann
 
Tardis was altijd goed in het oplepelen waar cursus materiaal gevonden kon worden. Je moet zijn oude berichten maar eens doorlezen.

Attached is een voorbeeldje van hoe je het zou kunnen doen.
 

Bijlagen

Het werkt!

Bedankt voor de reacties.
Door jullie bijdragen werkt de button
Wel dien ik nog verder te knutselen om
het precies te hebben zoals ik het wil.

Tot later!

Maurann.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan