Avatar billede claus777 Nybegynder
10. marts 2006 - 10:21 Der er 12 kommentarer og
1 løsning

Dynamisk søgning i TekstBox

Jeg har en tekstboks hvor man skal skrive kundenavn og koden skal køre på keyPress_event, så uanset hvordan brugeren taster oplysningerne, så vil det første bokstav i navn, mellemnavn, efternavn osv. altid stå med stort og hvis det er et A/S stor det også med stort. Eks. Navn Mellemnavn Efternavn A/S eller Bart Simsons A/S
Jeg har tænkt på select case metoden og hvis "mellemrum" eller "/" er blevet påvirket så skal næste bokstav skrives med STORT og derefter med små bokstaver.
Håber der er nogen der kan hjælpe mig.
Avatar billede supertekst Ekspert
10. marts 2006 - 12:51 #1
Her er så en prototype i VBA:

Dim tt(255), uC As Boolean
Private Sub TextBox1_Change()
Dim ix, dynaS As String
    ix = Len(TextBox1)
   
    If Len(TextBox1) > 0 Then
        If Len(TextBox1) > 1 Then
            If Mid(TextBox1, Len(TextBox1) - 1, 1) = " " Then
                uC = True
            Else
                uC = False
            End If
           
            If Len(TextBox1) > 2 Then
                If LCase(Right(TextBox1, 3)) = "a/s" Then
                    uC = True
                End If
            End If
        Else
            If Len(TextBox1) = 1 Then
                uC = True
            Else
                uC = False
            End If
        End If
       
        If uC = True Then
            tt(ix) = UCase(Mid(TextBox1, ix, 1))
        Else
            tt(ix) = LCase(Mid(TextBox1, ix, 1))
        End If
       
        dynaS = ""
        For f = 1 To ix
            dynaS = dynaS + tt(f)
        Next f
       
        TextBox1.Text = dynaS
    End If
End Sub
Private Sub UserForm_activate()
Dim f
    For f = 0 To 255
        tt(f) = ""
    Next f
End Sub
Avatar billede claus777 Nybegynder
10. marts 2006 - 13:40 #2
Det spiller ikke!!!
Dim tt(255), uC As Boolean  'Står udenfor SUB??? og tt skal vel ikke være Boolean
og i denne her...
Private Sub UserForm_activate()
Dim f    ' as ??? og tt as ??? Jeg formoder det er Integer???
    For f = 0 To 255
        tt(f) = ""
    Next f
End Sub
Avatar billede supertekst Ekspert
10. marts 2006 - 14:06 #3
Det er VBA-kode i en Word-userform
Dim tt(255), uC As Boolean : er anført globalt - dvs kan anvendes overalt i projektet
f : integer
tt() string

Udvikler du i VB?
Avatar billede claus777 Nybegynder
10. marts 2006 - 14:56 #4
Ja, VB 6.0
Avatar billede supertekst Ekspert
10. marts 2006 - 14:58 #5
Så skal du nok tilpasse min kode til disse omstændigheder.
Jeg har ikke VB.
Avatar billede kabbak Professor
10. marts 2006 - 18:08 #6
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim I As Integer, str As String, A As String
str = ""
If KeyAscii = 13 Then
    For I = 1 To Len(Text1.Text)
        If I = 1 Then
            A = UCase(Left(Text1.Text, 1))
        Else
            A = Mid(Text1.Text, I, 1)
        End If
        If I > 1 Then
            If Mid(Text1.Text, I - 1, 1) = " " Or Mid(Text1.Text, I - 1, 1) = "/" Then
                A = UCase(Mid(Text1.Text, I, 1))
            End If
        End If
        str = str & A
    Next
    Text1.Text = str
End If
End Sub
Avatar billede kabbak Professor
10. marts 2006 - 18:25 #7
eller sådan, den skifter mens man taster, hvis der rettes tilbage i teksten, er det ikke sikkert at det fanges.

Option Explicit
Dim Stor As Boolean

Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim Char As String
If Stor Then
Char = Chr(KeyAscii)
  KeyAscii = Asc(UCase(Char))
    Stor = False
End If

If KeyAscii = Asc(" ") Or KeyAscii = Asc("/") Then
    Stor = True
    Else
    Stor = False
End If

If Len(Text1.Text) = 0 Then
Char = Chr(KeyAscii)
  KeyAscii = Asc(UCase(Char))
  End If
End Sub
Avatar billede claus777 Nybegynder
11. marts 2006 - 11:52 #8
Hej kabbak
Selve koden virker, men som du selv siger, så fanger den ikke hvis man bruger "Backspace"
Tror du at du kan tage højde for dette??? Måske med select case hvor man spørger til hvor lang strengen er og går en tilbage. Hvis det er en tom plads " " ellser slash "/" så skal der skrives med stort ellers skal der skrives med småt???
Avatar billede kabbak Professor
11. marts 2006 - 12:03 #9
det bliver svært, man behøver jo ikke altid at bruge "Backspace" , man kan jo også bare klikke sig ind på et tegn der skal rettes.

Kan du ikke selv lege videre med det, jeg har ikke så megem tid, lige i øjeblikket. ;-))
Avatar billede claus777 Nybegynder
11. marts 2006 - 12:20 #10
Fair nok, smid et svar og du får de 30 point.
Avatar billede claus777 Nybegynder
11. marts 2006 - 12:21 #11
Hvis jeg ellers kan finde ud af det :)
Avatar billede kabbak Professor
11. marts 2006 - 12:23 #12
et svar ;-))
Avatar billede claus777 Nybegynder
12. marts 2006 - 11:18 #13
Så kan der også tages højde for brugen af "backspace" med select case

Select Case KeyAscii
Case 8
    If Len(Text1.Text) = 0 Then
    Stor = True
    End If
 
    If Not Text1.Text = "" Then
        If InStr(1, Text1.Text, " ") <> 0 Then
        Stor = True
        Exit Sub
        Else
        Stor = False
            If InStr(1, Text1.Text, "/") <> 0 Then
            Stor = True
            Else
            Stor = False
            End If
        End If
    End If
End Select
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester