Aanpassen aantal karakters

Status
Niet open voor verdere reacties.

wacco

Gebruiker
Lid geworden
9 mrt 2006
Berichten
229
Hallo,

Ik heb een veld waarin ik , afhankelijk van een waarde in een groepsvak, het aantal karakters wil aanpassen.
Op zich lukt dit, met de volgende code :
Code:
Private Sub Kader_type_Click()
If Me.Type_bak.Value = 1 Then
Me.karakter.Value = 15
Else
Me.karakter.Value = 35
End If

End Sub

Code:
Private Sub Vak_01_Change()
MaxLen = Me.karakter.Value

    If Len(Me.Vak_01.Text) > MaxLen Then
        Me.Vak_01.Text = Left(Me.Vak_01.Text, Len(Me.Vak_01.Text) - 1)
        Me.Vak_01.SelStart = MaxLen
    End If
End Sub

(laatste stukje code kunnen vinden op dit forum, met dank hiervoor)

Maar als ik 35 karakters heb in gevuld, en later kies ik in het groepsvak (kader_type) voor de optie 15 karakters, dan blijven de 35 karakters staan.
Pas nadat ik in dit veld ben gaan staan, en op delete heb gedrukt wordt het aantal karakters terug gebracht naar 15.
Graag zou ik willen dat bij het kiezen van een kleiner aantal karakters, direct het aantal karakters wordt aangepast in het veld.
Of wellicht eerst een waarschuwing dat een gedeelte van de tekst verdwijnt.

Weet iemand een oplossing voor dit problem, ik heb op het forum gezocht, maar heb zo snel niets kunnen vinden.

Gr,
 
Je kunt in principe (afhankelijk van de opbouw) gewoon:

Code:
call Vak_01_Change

gebruiken vanuit kader-type-click
 
Ik zou er een extra functie voor gebruiken die je kunt aanroepen. En daarnaast zou ik de oude waarde opslaan in een variabele, zodat je, als je van 15 naar 35 karakters terug switcht, je de oorspronkelijke tekst weer terug krijgt.
Code:
Dim MaxLen As Integer
Dim OldValue As String

Code:
Private Sub Kader_type_Click()
    If Me.Kader_type.Value = 1 Then
        OldValue = Me.Vak_01.Value
        Me.karakter.Value = 15
        TekstVeld
    Else
        Me.karakter.Value = 35
        Me.Vak_01.Value = OldValue
        TekstVeld
    End If
    Me.Repaint
End Sub

Code:
Private Sub Vak_01_Change()
    TekstVeld
End Sub

Code:
Function TekstVeld()
    Me.Vak_01.SetFocus
    MaxLen = Me.karakter.Value
    On Error Resume Next
    If Len(Me.Vak_01.Text) > MaxLen Then
        Me.Vak_01.Text = Left(Me.Vak_01.Text, MaxLen)
        On Error GoTo 0
    End If
    Me.Vak_01.SelStart = Me.Vak_01.SelLength
End Function
 
@octafish,
Dankje voor de snelle reactie.
Maar helaas doet de code niet wat ik zou willen.
Op het moment dat ik van 35 karakters naar 15 ga, dan wordt de volledige tekst in Vak-01 gewist.
Ook de oude tekst komt niet terug.
Dat laatste is voor mij niet noodzakelijk.
Ik zou graag willen als er tekst in Vak-01 staat, met een lengte van 35 karakters, en ik kies voor de optie van 15 karakters.
Dat dan de laatste 20 karakters simpelweg verdwijnen, indien mogelijk met een waarschuwing dat dit staat te gebeuren.
Het opnieuw terug laten komen van de oude tekst is niet nodig.
Waarschijnlijk heb ik het niet helemaal duidelijk uitgelegd in mijn eerste bericht, maar ik hoop dat het nu wat duidelijker is.

Momenteel (met de code uit het eerste bericht), blijven de 35 karakters of minder gewoon staan, en kan ik er geen toevoegen.
Maar het aantal karakters boven 15, gaan pas weg als ik in het veld (vak-01) ga staan en op delete druk.

Ik hoop dat het wat duidelijker is wat het problem is, en natuurlijk ook dat er een oplossing voor is.

Gr,
 
Ik heb na wat vogelen deze oplossing gevonden.
Het aantal karakters wordt nu aangepast, aan de keuze die gemaakt wordt.
Het werkt wel, maar het is volgens mij een groffe manier.
Ik krijg het niet voor elkaar om voordat gekozen wordt voor een kleiner aantal karakters, een melding te geven dat het eerder aantal karakters zal worden beperkt tot een kleiner aantal.
Het werkt dus wel, ik kan hiermee verder.....maar zelf vindt ik het niet al te fraai.
Dus als iemand een oplossing heeft om dit te verfraaien......dan graag.

Code:
Private Sub Kader_type_Click()
If Me.Type_bak.Value = 1 Then
Me.karakter.Value = 15
Me.Vak_01 = Mid(Me.Vak_01, 1, Me.karakter)
Me.Vak_02 = Mid(Me.Vak_02, 1, Me.karakter)
Me.Vak_03 = Mid(Me.Vak_03, 1, Me.karakter)
Me.Vak_04 = Mid(Me.Vak_04, 1, Me.karakter)
Me.Vak_05 = Mid(Me.Vak_05, 1, Me.karakter)

Me.Koptekst_1 = Mid(Me.Koptekst_1, 1, Me.karakter)
Me.Koptekst_2 = Mid(Me.Koptekst_2, 1, Me.karakter)

Else
Me.karakter.Value = 35
End If

Gr,
 
Als je de uitvoer wilt laten afhangen van een Msgbox, dan moet je die als eerste laten komen voordat je de handelingen uitvoert. Ik heb (met een werkend voorbeeld van mijn code, die vind ik toch beter als jouw variant ;) ) toegevoegd.
 

Bijlagen

@octafish,

Hartelijk dank voor de aanpassing van de code, en het bijgevoegde voorbeeld.....maakt een hoop duidelijker.
Ga jouw code toepassen, want deze is inderdaad een heel stuk fraaier.

bedankt voor de geweldige hulp.
Ik sluit dit draadje af.

Gr,
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan