I en ruta för beräkning kan jag skriva ",12" som funkar i beräkningen, men bara för att det ska se bättre ut vill jag att man ser "0,12". Hur får jag dit nollan före kommat när jag t.ex. trycker Enter? (VB6) Så här kanske? Så här ser min kod ut för "rutan" man skriver in ett värde och trycker Enter: Lägg in raden If Left$........... där jag visar härunder Du har KeyAscii = 0 på fel ställe. Som du har det kan man skriva bokstäver KeyAscii = 0 måste man väl ha vid enter (13), annars piper det väl? Run-time error '13': <b>Har du någon idé om felet Thomas för det är intressant att kunna göra så som du föreslår. </b> 1. Skall det vara så djä... svårt att förstå !? <b>Thomas verkar inte förstå vad Select Case satsen gör. Gammal skåpmat.</b>Få "0,12" när man skriver ",12"
/PeterSv: Få "0,12" när man skriver ",12"
<code>
Sub Textbox1_OnKey
If KeyAscii = 13 Then
KeyAscii = 0
Textbox1.Text = CStr(CDbl(Textbox1.Text))
End If
End Sub
</code>
Det var länge sen jag använde VB6 så jag vet inte om allt heter exakt så där, men du borde förstå principen.
/ThomasSv:Få "0,12" när man skriver ",12"
Private Sub txt1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
'Tillåt bara BackSpace,Enter,Komma,Minus,Punkt,siffror 0-9
Case 8, 13, 44, 45, 46, 48 To 57
'Alltid punkt som decimal avskiljare
If KeyAscii = 44 Then KeyAscii = 46
If KeyAscii = 13 Then
KeyAscii = 0
If Val(txt1.Text) > 0 And Val(txt2.Text) > 0 Then Call Varvtal
If Val(txt1.Text) = 0 Then
MsgBox "Du har inte skrivit in någon skärhastighet.", 48, "Hoppsan!"
Else
txt2.SetFocus
txt2.SelStart = 0
txt2.SelLength = Len(txt2.Text)
End If
End If
End Select
End Sub
Har provat att lägga in ditt
txt1.Text = CStr(CDbl(txt1.Text))
under
KeyAscii = 0
Blir fel men jag fattar inte vad...
Sv:Få "0,12" när man skriver ",12"
<code>
Case 8, 13, 44, 45, 46, 48 To 57
'Alltid punkt som decimal avskiljare
If KeyAscii = 44 Then KeyAscii = 46
If KeyAscii = 13 Then
KeyAscii = 0
If Left$(txt1.Text, 1) = "." Then txt1.Text = "0" & txt1.Text 'Här
If Val(txt1.Text) > 0 And Val(txt2.Text) > 0 Then Call Varvtal
</code> Sv: Få "0,12" när man skriver ",12"
Skall vara så här
<code>
Select Case KeyAscii
'Tillåt bara BackSpace,Enter,Komma,Minus,Punkt,siffror 0-9
Case 8, 13, 44, 45, 46, 48 To 57
'Alltid punkt som decimal avskiljare
If KeyAscii = 44 Then KeyAscii = 46
If KeyAscii = 13 Then
If Left$(txt1.Text, 1) = "." Then txt1.Text = "0" & txt1.Text
If Val(txt1.Text) > 0 And Val(txt2.Text) > 0 Then Call Varvtal
If Val(txt1.Text) = 0 Then
MsgBox "Du har inte skrivit in någon skärhastighet.", 48, "Hoppsan!"
Else
txt2.SetFocus
txt2.SelStart = 0
txt2.SelLength = Len(txt2.Text)
End If
End If
Case Else
KeyAscii = 0 'Här har jag ändrat
End Select
</code>Sv:Få "0,12" när man skriver ",12"
/ThomasSv:Få "0,12" när man skriver ",12"
Type mismatch
sen blir raden: 'txt1.Text = CStr(CDbl(txt1.Text))' gulmarkerad.
Har du någon idé om felet Thomas för det är intressant att kunna göra så som du föreslår. Jag kör på SÅP:s lösning som funkar. Och så ska 'KeyAscii = 0' ligga i slutet som du påpekade Sven. Det piper inte hos mig. Kanon! 1000 tack till er båda /PeterSv: Få "0,12" när man skriver ",12"
Inte alls intressant. Kvalificerat "bullshit"
Thomas verkar inte förstå vad Select Case satsen gör. Gammal skåpmat.
Användaren skall bara kunna mata in siffror mm.
Sen kommer en "nisse" att skriva något om Klistra in. Så här blev min slutlösning.
<code>
Option Explicit
Private Sub Text1_KeyPress(KeyAscii As Integer)
'Normalt bör du tillåta dessa tecken tillsammans med siffror
'BackSpace, Tab, Enter, Komma, Minustecken, Punkt och 0 - 9
Select Case KeyAscii
Case 8, 9, 13, 44, 45, 46, 48 To 57
' Tillåt
'här byter du sida på 44 och 46 efter önskemål ,komma(,) punkt(.)
If KeyAscii = 44 Then KeyAscii = 46 ' Här byter jag ut komma till punkt
' så här bör det vara konsekvent
' If KeyAscii = 44 Then KeyAscii =46
Case Is = 22 'användaren klistrar in Ctrl+V
If IsNumeric(Clipboard.GetText) Then _
Text1.Text = Replace(Clipboard.GetText, ",", ".") 'byter komma till punkt vid Ctrl+V (Klistra in)
Clipboard.Clear
Case Else
KeyAscii = 0
End Select
End Sub
</code>
Tack för din Feedback Peter. Det värmer att någon läser och förstår.
Mest är det "nissar" som försöker knäppa gubben på näsan. ;-)Sv: Få "0,12" när man skriver ",12"
Anledningen till att du får mismatch är att din sträng innehåller '.' vilket är lika illa som att ditt tal innehåller en bokstav. I svenskt system ska det vara ','
2.
CStr(CDbl()) returnerar inte den inledande nollan. Det fungerar tvärtom, har du en nolla där tas den bort.
3.
Man kan eventuellt använda Format för att få till det på liknande Tomas sätt.
Text1.Text = Format(Text1.Text, "0.00")
Men jag tror inte det blir riktigt som du vill ha det då. Då visas decimaler även på heltal. Och akta dig för att den avrundar talen om de innehåller fler siffror än formatet.
4. Kör på Sven Åkes lösningen om det funkar som du vill.
Sv:Få "0,12" när man skriver ",12"
Text 040 123456 är text. 0,12 är matematikSv:Få "0,12" när man skriver ",12"
Förklara gärna hur jag har tänkt fel med Select Case. Eller ska du ha ett knäpp till på näsan? :-)
/Thomas