Sitter och klurar på ett problem, koden nedan fungerar så att första bokstav blir Stor. Men skriver jag in med stora bokstäver blir det det och det är det som jag inte får in i mitt tänkande. Det är tre text som det ska in i Text1(0) till Text1(2). Ett ex: Carl inte CARL. "Det är början till en adressbok hade jag tänkt". Är det någon ? Jag tyckte du var på god väg. I VB6 finns funktionen StrConv() som kan göra jobbet åt dig. Tack för era svar, båda är vad jag har använding av. Hej Hej Hej, ytterligare förslag till stacken. Gaggiga Sven Igen Tycker också din lösning är smidig på så sätt att det omvandlar direkt. Private Sub Text1_LostFocus(Index As Integer) Hej. Hej Hej... Tack för upplysningen. Viste faktist inte det. Men gäller det även Unicode tecken? Såg ditt inlägg blev nyfiken på vad Unicode är för något. Måste fråga för är man grön så är man. Kort om Unicode: UCase + LCase
S J
*-----Kod -----*
Private Sub Text1_LostFocus(Index As Integer)
If Len(Text1(0)) > 0 Then
If Mid(Text1(0), 1, 1) <> Mid(UCase(Text1(0)), 1, 1) Then
If Len(Text1(0)) > 1 Then
Text1(0) = Mid(UCase(Text1(0)), 1, 1) & Right(Text1(0), Len(Text1(0)) - 1)
Else
Text1(0) = Mid(UCase(Text1(0)), 1, 1)
End If
End IfSv: UCase + LCase
Private Sub Text1_LostFocus(Index As Integer)
If Len(Text1(0)) > 0 Then
If Mid(Text1(0), 1, 1) <> Mid(UCase(Text1(0)), 1, 1) Then
If Len(Text1(0)) > 1 Then
'Text1(0) = Mid(UCase(Text1(0)), 1, 1) & Right(Text1(0), Len(Text1(0)) - 1)
' prova
Text1(0) = Mid(UCase(Text1(0)), 1, 1) & LCase(Right(Text1(0), Len(Text1(0)) - 1))
Else
Text1(0) = Mid(UCase(Text1(0)), 1, 1)
End If
End If
MVH
\Leif PSv: UCase + LCase
Text1(0) = StrConv(Text1(0), vbProperCase)
Men den ändrar första bokstaven i alla ord till stor bokstav.
Liten fråga, skall det vara en referens till Text1(0) eller till Text1(Index)?
//Mvh, AndreasSv: UCase + LCase
Rubrik:Sv: UCase + LCase
2001-02-04 20:45:13 - Leif P
MVH
\Leif P
------------
Rubrik:Sv: UCase + LCase
2001-02-04 23:31:02 - Andreas Hillqvist
I VB6 finns funktionen StrConv() som kan göra jobbet åt dig.
Text1(0) = StrConv(Text1(0), vbProperCase)
Men den ändrar första bokstaven i alla ord till stor bokstav.
Liten fråga, skall det vara en referens till Text1(0) eller till Text1(Index)?
//Mvh, Andreas
Det är till Index. Den här var bra till namn om det är mer ett ord. Jag var inne på att göra en Select Case Index, men har ej kommit på om det är det bästa, ska prova lite om det lossnar nu.
:-) SvenSv: UCase + LCase
Så här skulle jag princip lösa ditt prob.
Private Sub Text1_KeyPress(Index As Integer, _
KeyAscii As Integer)
'TextBox med index 3 får alltid första bokstav UCase
If Index = 3 Then
If Len(Text1(3)) = 0 Then
Select Case KeyAscii
Case 97 To 122
KeyAscii = KeyAscii - 32
Case Is = 228 'ä
KeyAscii = 196
Case Is = 229 'å
KeyAscii = 197
Case Is = 246 'ö
KeyAscii = 214
End Select
End If ' Len
End If ' Index
End Sub
mvh
SvenSv: UCase + LCase
Yttrligare ett sätt att lösa ditt prob.
Private Sub Text1_KeyPress(Index As Integer, _
KeyAscii As Integer)
'TextBox med index 3 får alltid första bokstav UCase
If Index = 3 Then
If Len(Text1(3)) = 0 Then
If KeyAscii > 96 And KeyAscii < 123 _
Then KeyAscii = KeyAscii And 223
If KeyAscii = 228 _
Then KeyAscii = KeyAscii And 223
If KeyAscii = 229 _
Then KeyAscii = KeyAscii And 223
If KeyAscii = 246 _
Then KeyAscii = KeyAscii And 223
End If ' Len
End If ' Index
End Sub
mvh
SvenSv: UCase + LCase
Om jag inte har fattat det helt fel så tycker jag det vore enklast att mellanlagra i en tmpvariabel och sedan helt sonika använda strconv.
Men det kanske är för enkelt ???
tmpText=LCase(Text_1(index))
Text_1(index)=strConv(tmpText,3)Sv: UCase + LCase
Inget annat att vänta från en 62 åringr
Jag måsye optimera ytterligare
Private Sub Text1_KeyPress(Index As Integer, _
KeyAscii As Integer)
'TextBox med index 3 får alltid första bokstav UCase
'Tecken efter mellanslag blir Ucase
Static lastchr As String
If Index = 3 Then
If Len(Text1(3)) = 0 Or lastchr = Chr$(32) Then
If KeyAscii > 96 And KeyAscii < 123 _
Then KeyAscii = KeyAscii And 223
If KeyAscii > 227 And KeyAscii < 247 _
Then KeyAscii = KeyAscii And 223
End If ' Len
lastchr = Chr$(KeyAscii)
End If ' Index
End Sub
StrConv är väl Ok Men ! då har man i princip
förlorat poängen med omvandlingen.
Enl mitt förslag så ändras tecknet direkt när användaren
trycker på tangenten.
Enl ert förslag så blir det så att att han ser
i textboxen aj fae... jag slog liten bokstav
så backar han och korrigerar.Då behövs inte
StrConvert
tycker jag (som alltid vill ha rätt :-))
mvh
SvenSv: UCase + LCase
Men den har några luckor. Om du klistrar in text omvandlas den ej. Om du markerar all text och trycker på en alfanumerisk tanget, eller om du placerar markör längst till vänster blir den ej stor bokstav. Är osäker på om den hanterar alla tecken som har gemener och versaler...
Men strConv i LostFocus är inte heller felfri.
Har för mig att Lostfocus inte inträffar om man stänger formuläret med X knappen i över höger hörne. Finn säkert mer problem...
Men det är ett knivigar problem än vad det utger sig för att vara. Men vem gillar inte en utmaning... :O)Sv: UCase + LCase
' Så här långt har jag kommit, lite kladd blir det men på G.
'1 Den första är perfekt för mig, Det blir Stor Så Här
' i alla 3 text Fnamn, Enamn och Gata.
' Har tagit bort X knappen, hittade en API kod för det. "Snyggt".
tmpText = LCase(Text1(Index))
Text1(Index) = StrConv(tmpText, 3)
Text1(4).Text = UCase(Text1(4).Text) '2 Stora bokstäver. För det är Orten.
'Om det är mindre än 5 siffror.
If Index = 3 Then
If Len(Text1(3)) <= 4 Then
MsgBox "Det fattas en siffra eller mer!"
Text1(3).SetFocus
Else
'Om det är 5 siffror.
If Index = 3 Then
If Len(Text1(3)) = 5 Then _
Text1(3) = Left$(Text1(3), 3) _
& " " & Right$(Text1(3), 2)
' Om det är 6 siffror.
If Index = 3 Then
' Problemet nedan om det är 6 siffror Ex: 123456
' Blir resultatet 123 56
If Len(Text1(3)) = 6 Then _
Text1(3) = Left$(Text1(3), 3) _
& " " & Right$(Text1(3), 2)
End If
'End If
' End If
' End If
End If
End If
End If
End SubSv: UCase + LCase
Här förändrat den till lite mer i min smak. Hoppas du uppskattar det.
Är starkt emot att disabla kryssrutan. Bättra att lura den med en sendkeys satts i QueryUnload.
Om du använder VB6 rekomenderar jag att du använder Validate eventet, vilket är till för att valider eftersom möjlig het vis att hindra textrutan från att förlora fokus(genom att sätta Cancel = True).
Har lag upp det såhär:
1 - Förnamn
2 - Efternamn
3 - Gatuadress
4 - Postnummer
5 - Ort
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
SendKeys "{Tab}", True
End Sub
'----- VB5 -----
Private Sub Text1_LostFocus(Index As Integer)
Dim TextBox As TextBox
Dim tmpText As String
Set TextBox = Text1(Index)
Select Case Index
Case 1 To 3 'För-, efternamn och gatuadress
tmpText = LCase(TextBox)
TextBox = StrConv(tmpText, vbProperCase)
Case 4 ' PostNummer
If TextBox Like "### ##" Then
ElseIf TextBox Like "#####" Then
TextBox = Format$(TextBox, "@@@\ @@")
Else
MsgBox "Du har angivit Ogiltligt postnummer!"
TextBox.SetFocus
End If
Case 5 ' Stora bokstäver för Orten.
TextBox = UCase(TextBox)
End Select
End Sub
'----- VB6 -----
Private Sub Text1_Validate(Index As Integer, Cancel As Boolean)
Dim TextBox As TextBox
Dim tmpText As String
Set TextBox = Text1(Index)
Select Case Index
Case 1 To 3 'För-, efternamn och gatuadress
tmpText = LCase(TextBox)
TextBox = StrConv(tmpText, vbProperCase)
Case 4 ' PostNummer
If TextBox Like "### ##" Then
ElseIf TextBox Like "#####" Then
TextBox = Format$(TextBox, "@@@\ @@")
Else
MsgBox "Du har angivit Ogiltligt postnummer!"
Cancel = True
End If
Case 5 ' Stora bokstäver för Orten.
TextBox = UCase(TextBox)
End Select
/Mvh, Andreas HillqvistSv: UCase + LCase
Det blev en hel del kod Anders
>Anders Skrev
>Osäker på om den hanterar alla tecken som har gemener och versaler...
Jo det gör den enl standard är det alltid 32 teckens skillnad
mellan gemener och versaler.
I bitvis operation är det bit nr 5 som är satt till 1 vid små bokstäver
och 0 (noll) vid stora
slut gaggat om detta
SvenSv: UCase + LCase
Nu har jag fått mycket tips och håller på att utvärderar dessa, det verkar fungera som jag hade tänkt det. Det är då man upptäcker något annat som är galet. återkommer mer om det.
Tack för mig.
:-) SvenSv: UCase + LCase
Lär sig nåt nytt varje dag...Sv: UCase + LCase
:-) Sven
<------------------>
Rubrik:Sv: UCase + LCase
2001-02-07 09:26:50 - Andreas Hillqvist
Tack för upplysningen. Viste faktist inte det. Men gäller det även Unicode tecken?
Lär sig nåt nytt varje dag...
Sv: UCase + LCase
Det är ju väldigt begränsande att bara kunna använda 256 tecken(en byte per tecken). Så därför uppkom Unicode. Vilket använder två byte per tecken.