standaard plaatje weergeven in formulier

Status
Niet open voor verdere reacties.

Sabreur1970

Gebruiker
Lid geworden
8 nov 2013
Berichten
6
Ik ben een database aan het maken en ik wil hier ook afbeeldingen laten zien. Hoe ik dit aan de records gekoppeld kan krijgen is mij intussen gelukt. Nu wil ik echter voor die records, waar (nog) geen afbeelding van is een standaard plaatje laten zien.
Het koppelen heb ik als volgt gedaan (script hier wél kunnen vinden ;)):

Code:
Private Sub Form_Current()
    Call Plaatjeslezen
    
End Sub
Private Function Plaatjeslezen()
    
    If Not Me.afbMedailleVoor & "" = "" Then
    On Error Resume Next
        Me.imgMedaille.Picture = CurrentProject.Path & "\pic\voor\" & Me.afbMedailleVoor
    Else
        Me.imgMedaille.Picture = ""
    End If

    If Not Me.afbLint & "" = "" Then
    On Error Resume Next
        Me.imgLint.Picture = CurrentProject.Path & "\pic\lint\" & Me.afbLint
    Else
        Me.imgLint.Picture = ""
    End If

End Function

De afbeelding, die ik wil laten zien als het bestand niet in de opgegeven map te vinden is, wordt bepaald door : CurrentProject.Path & "\pic\no-img.jpg"

Wat er nu met deze code gebeurt is dat bij elk record waarvan geen afbeelding gevonden is, het formulier de afbeelding van de laatst gekozen record laat staan.

Ik ben nu al twee dagen hier op dit forum aan het zoeken, maar ik kan inmiddels door de bomen het bos niet meer zien en heb het dus nog niet kunnen vinden. Is er iemand die mij kan helpen?
Ik ben een echte beginner in deze wondere wereld van VBA en hoop nog heeeeeeeeel veel te kunnen leren.
 
Je maakt het object wel leeg, maar je ververst het formulier niet. En dan zie je nog het vorige plaatje. Maar i.p.v. het image object leeg te maken, wil je toch een standaardplaatje? En daarvoor moet je de functie veranderen.

Code:
Private Function Plaatjeslezen()
    If Not Me.afbMedailleVoor & "" = "" Then
        On Error Resume Next
        Me.imgMedaille.Picture = CurrentProject.Path & "\pic\voor\" & Me.afbMedailleVoor
    Else
        Me.imgMedaille.Picture = CurrentProject.Path & "\pic\no-img.jpg"
    End If

    If Not Me.afbLint & "" = "" Then
        On Error Resume Next
        Me.imgLint.Picture = CurrentProject.Path & "\pic\lint\" & Me.afbLint
    Else
        Me.imgLint.Picture = CurrentProject.Path & "\pic\no-img.jpg"
    End If
    Me.ReFresh
    Me.Repaint
End Function
 
Opgelost !!!!!!

Hi Michel,
bedankt voor je antwoord. Is inderdaad logisch dat je het formulier moet verversen om de wijziging door te voeren. Heb dit uiteraard dan ook gelijk aangepast. ;)
Helaas bleef het probleem nog steeds bestaan. Zodra er in de opgegeven map geen afbeelding staat met de opgegeven naam, dan geeft het formulier nog steeds de afbeelding van het vorig opgeroepen record weer.

Ik ben nog eens gaan nadenken (goh :)) en kwam er achter dat er nog geen check in zat om te controleren of het op te vragen bestand wel bestaat in de opgegeven map.

Heb inmiddels de oplossing gevonden (wat een geweldig forum is dit):

Code:
Private Sub Form_Current()
    Call showImage
    
End Sub
Private Function showImage()
    If Dir(CurrentProject.Path & "\pic\voor\" & Me.afbMedailleVoor) <> "" Then
    On Error Resume Next
        Me.imgMedaille.Picture = CurrentProject.Path & "\pic\voor\" & Me.afbMedailleVoor
    Else
        Me.imgMedaille.Picture = CurrentProject.Path & "\pic\no-img.jpg"
    End If
         
    If Dir(CurrentProject.Path & "\pic\achter\" & Me.afbMedailleAchter) <> "" Then
    On Error Resume Next
        Me.imgMedailleAchter.Picture = CurrentProject.Path & "\pic\achter\" & Me.afbMedailleAchter
    Else
        Me.imgMedailleAchter.Picture = CurrentProject.Path & "\pic\no-img.jpg"
    End If
    
    If Dir(CurrentProject.Path & "\pic\lint\" & Me.afbLint) <> "" Then
    On Error Resume Next
        Me.imgLint.Picture = CurrentProject.Path & "\pic\lint\" & Me.afbLint
    Else
        Me.imgLint.Picture = CurrentProject.Path & "\pic\no-img.jpg"
    End If

    Me.Refresh
    Me.Repaint

End Function

De grap is overigens dat het formulier met deze functie het ook doet zonder
Code:
    Me.Refresh
    Me.Repaint
Ik heb het voor het nette er maar wel ingelaten... je weet maar nooit.
 
Het was ook een shot in the dark... soms werkt het, soms niet :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan