achtergrond kleur aanpassen

Status
Niet open voor verdere reacties.

perco

Gebruiker
Lid geworden
2 mei 2012
Berichten
49
Hallo

ik heb een formulier waarvan de gegevens niet per ongeluk aangpast mogen worden
bij openen staat dit formulier dan ook op bij openen op "me.allowedits = false"

ik heb een knopje gemaakt met "Me.AllowEdits = True"
werkt allemaal perfect
maar om kenbaar te maken dat de velden vergrendeld zijn zou ik ze in vergrendelde staat een grijze achtergrondkleur willen geven en bij het ontgrendelen dan weer transparant worden

is dit op een makkelijke mannier te regelen ?
 
Eerst de velden enablen en dan de kleur aanpassen en vervolgens weer disablen.

Grt,

XLFAC
 
Niet helemaal; dit is voldoende:

Code:
Private Sub cmdLock_Click()
If Me.AllowEdits = False Then
    Me.txtFotograaf.BackStyle = 0
    Me.AllowEdits = True
Else
    Me.txtFotograaf.BackStyle = 1
    Me.AllowEdits = False
End If

Eventueel kun je met een loop door alle tekstvakken heenlopen als het er veel zijn; in bovenstaande opzet moet je ze per stuk instellen.
 
Bekijk bijlage test.zip

ik heb maar even een voorbeeld
knop unlock 1 is wat ik had , unlock 2 is het voorstel van Octafish

kleur veranderd niet met drukken van het knopje
ik kan standaard wel de kleur instellen op grijs en dan veranderd deze wel op doorzichtig met de druk op de knop
maar op het moment dat ik met de cursor in het veld kom gaat ie weer op grijs maar kan ik het veld nog wel bewerken
 
Kun je er een 2k3 variant van maken? Dan kan ik er in de loop van de ochtend nog even naar kijken.
Een transparante 'kleur' zie je als het veld niet bewerkt wordt; klik je in het tekstveld, dan zie je de ingestelde achtergrondkleur. Verlaat je het veld, dan wordt het tekstvak weer transparant.
 
Ik heb even een nieuw formulier gemaakt, want de vorige crashte steeds. Komt wel eens voor als je een db downgrade.
In dit formulier heb ik de namen van de tekstvelden aangepast, en een routine toegevoegd die in één keer alle controls instelt. Mits ze de prefix 'txt' hebben (daarom de naamaanpassing :) )
 

Bijlagen

Michel
Dit is wat ik bedoel en wat ik ook ga gebruiken , maar op het moment dat ik ga wijzigen in het veld wordt deze toch weer grijs , is natuurlijk mee te leven maar onlogisch daar grijs zou aangeven dat ik niet kan/mag wijzigen

is dat nog aan te passen ?
 
Michel
Dit is wat ik bedoel en wat ik ook ga gebruiken , maar op het moment dat ik ga wijzigen in het veld wordt deze toch weer grijs , is natuurlijk mee te leven maar onlogisch daar grijs zou aangeven dat ik niet kan/mag wijzigen

is dat nog aan te passen ?

aangepast een werkt zoals boven beschreven
wat is overigens het verschil "bij aanwijzen" of "bij openen"

ook wordt het formulier een stuk trager bij laden
zou er mee te maken kunnen hebben dat bij de niet beveiligde versie het formulier open staat en de besturingselementen zichtbare zijn zonder data
bij de beveiligde opent het formulier leeg zonder besturingselementen , deze worden dan pas getoond na een selectie op een hoger formulier
 
De gebeurtenis <Bij aanwijzen> wordt alleen uitgevoerd als je het formulier opent, dus eenmaal. De gebeurtenis <Bij aanwijzen> wordt uitgevoerd zodra je een volgend record activeert. Het lijkt mij dat je bij elk record dat je opent het formulier weer beveiligd wilt hebben, vandaar dat de code daar bij staat.
 
Code:
Private Sub Form_Current()
   For Each ctl In Controls
        With ctl
            Select Case .ControlType
                Case acTextBox
                    If LCase(Left(.Name, 3)) = "txt" Then
                        .BackStyle = 1
                        .Enabled = False
                        .Locked = False
                    End If
                [COLOR="#FF0000"]Case acListBox
                    If LCase(Left(.Name, 3)) = "txt" Then
                        .BackStyle = 1
                        .Enabled = False
                        .Locked = False[/COLOR]                    End If
            End Select
        End With
    Next ctl
    Me.AllowEdits = False

ik heb nu zelf nog een keuzelijst met invoervak toegevoegd maar dit werkt dan weer niet , wat doe ik hier fout
 
De 2e End If (na het rode gedeelte) moet zo wie zo een regel naar beneden. Verder kunnen we met je opmerking "maar dat werkt niet" niet zoveel. Met zulke informatie kunnen we alle kanten op. Omschrijf wat uitgebreider wat er niet gaat. Krijg je een foutmelding? Zo ja, welke foutmelding bijvoorbeeld.
 
Buiten dat: je hebt de code zonder verder te controleren over genomen van het tekstvak, en dat is natuurlijk niet verstandig. Altijd controleren of je een bepaalde eigenschap wel kunt instellen!
Zo is het bij een tekstvak wel mogelijk om de Backstyle aan te passen, maar bij een Listbox niet. Ik zou een listbox ook een andere prefix geven dan "txt". Bijvoorbeeld "lst".
 
Sorry voor eventuele slordigheden
maar wat ik bedoelde is dat mijn aanpassing in de VB code niet het resuktaat gaf als de code die Michel heeft gemaakt
ik heb wat code uitgezet en dat werkt voor de txt vakken prima maar voor de keuzelijst met invoervak nog niet

bij "Enabled = False" krijgt deze volgens mij een grijswaarde mee en werkt prima ook zijn ze geblokkeerd
ook zou het selectievakje nog geblokkeerd moeten zijn
als ik de laatste regel "'Me.AllowEdits = False" aanzet is wel alles geblokkeerd


Code:
  For Each ctl In Controls
        With ctl
            Select Case .ControlType
                Case acTextBox
                    If LCase(Left(.Name, 3)) = "txt" Then
                        '.BackStyle = 1
                        .Enabled = False
                        '.Locked = False
                    End If
                Case acListBox
                    If LCase(Left(.Name, 3)) = "lst" Then
                        '.BackStyle = 1
                        .Enabled = False
                        '.Locked = False
                    End If
            End Select
        End With
    Next ctl
    'Me.AllowEdits = False

Bekijk bijlage test20031.zip
 
Als je tekstvakken en keuzelijsten met invoervak aan wilt zetten, zou ik het zo doen:

Code:
Dim bLocked As Boolean, bEnabled As Boolean, iStyle As Integer

    If Me.AllowEdits = False Then
        bLocked = False: bEnabled = True: iStyle = 0
    ElseIf Me.AllowEdits = True Then
        bLocked = True: bEnabled = False: iStyle = 1
    End If
    
    For Each ctl In Controls
        With ctl
            Select Case .ControlType
                Case acTextBox
                    If LCase(Left(.Name, 3)) = "txt" Then
                        .BackStyle = iStyle
                        .Enabled = bEnabled
                        .Locked = bLocked
                    End If
                Case acComboBox
                    If LCase(Left(.Name, 3)) = "cbo" Then
                        .BackStyle = iStyle
                        .Enabled = bEnabled
                        .Locked = bLocked
                    End If
            End Select
        End With
    Next ctl
    Me.AllowEdits = bEnabled
 
Octafish


lang geleden dat ik met dit probleem geconfronteerd was maar ik kom er toch op terug omdat ik het niet goed krijg

wat er gebeurd er;
Het formulier wordt gedeblokkeerd bij knopdruk en de velden passen hun kleur aan maar zodra ik op het pijltje van de keuzelijst druk blokkeerd hij deze weer.
als ik eerst de cursor in het vak plaats dan kan ik wel daarna de keuze bedienen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan