Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

du kan gjøre slik


Private Sub Command1_Click()
Text2.Text = Text1.Text / 2
End Sub

 

Edit: Får å sleppe error når det kommer bokstaver inn i text1, så kan du skrive koden slik

 


Private Sub Command1_Click()
Text2.Text = Val(Text1.Text) / 2
End Sub

Endret av Scix
Lenke til kommentar

Noen ganger kan det være likegreit å fjerne muligheten å skrive bokstaver i tekstbokser. Dette kan man gjøre ved bruk av API-kallet SetWindowLong. For å gjøre dette legger du først til en modul i prosjeket ved å trykke på Project og så Add module. I denne legger du følgende kode:

 

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Const GWL_STYLE = (-16)
Const ES_NUMBER = &H2000&

Public Sub SetNumber(NumberText As TextBox, Flag As Boolean)

Dim curstyle As Long, newstyle As Long

curstyle = GetWindowLong(NumberText.hwnd, GWL_STYLE)

If Flag Then
  curstyle = curstyle Or ES_NUMBER
Else
  curstyle = curstyle And (Not ES_NUMBER)
End If

newstyle = SetWindowLong(NumberText.hwnd, GWL_STYLE, curstyle)
NumberText.Refresh

End Sub

 

Så kan du gjøre hvilken som helst tekstboks i formene dine til bare numretiske.

Her er et eksempel:

 

Private Sub Form_Load()

SetNumber Text1, True

End Sub

 

Etter dette vil det kun være mulig å skrive nummer i Text1.

Lenke til kommentar

Takker og bukker.

 

Man kan ikke skrive komma når man bruker den modulen :)

 

Hvordan kan jeg begrense antallet desimaler?

 

Er det en måte å få teksten som står etter tekstboksene til å stå i flertall mo tallet er over 1?

:roll:

Endret av Blaster2k
Lenke til kommentar

Hvis du vil gjøre det mulig å skrive komma i tillegg til å begrense antall desimaltall må du legge følgende kode i modulen:

 

Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long

Const LOCALE_SDECIMAL = &HE
Const LOCALE_USER_DEFAULT = &H400

Public Function RemoveLetters(Text As String, MaxDecimal As Long) As String

Dim Tell&, Tmp$, Letter$, Dec$, UsedDec&, CntDec&

If Text = "" Then Exit Function
Dec = GetInfo(LOCALE_SDECIMAL)

For Tell = 1 To Len(Text)

   Letter = Mid(Text, Tell, 1)
   
   If IsNumeric(Letter) And (CntDec < MaxDecimal Or MaxDecimal < 0) Then
       Tmp = Tmp & Letter
       If UsedDec = 1 Then CntDec = CntDec + 1
   End If
   
   If Letter = Dec And UsedDec = 0 Then
       Tmp = Tmp & Letter
       UsedDec = 1
   End If
Next

RemoveLetters = Tmp

End Function

Public Function GetInfo(ByVal lInfo As Long) As String

Dim Buffer As String, Ret As String

Buffer = String$(256, 0)
Ret = GetLocaleInfo(LOCALE_USER_DEFAULT, lInfo, Buffer, Len(Buffer))

If Ret > 0 Then
   GetInfo = Left$(Buffer, Ret - 1)
End If

End Function

 

Hvis du nå vil at txtText tekstboksen skal ha begrensing i antall desimaltall og bruk av bokstaver skriver du inn denne koden i formen:

 

Private Sub txtTest_Change()

' Tallet 4 er viser til hvor mangen desimaltall som kan skrives. Brukes -1 oppfattes 
' det som ingen grense
txtTest.Text = RemoveLetters(txtTest.Text, 4)

End Sub

 

For at teksten i en label skal være gramatisk korrekt, altså med flertall og entall, kan du legge denne koden inn i Change prosedyren etter RemoveLetter linjen:

 

lblInfo.Caption = IIf(Val(txtTest.Text) = 1, "appelsin", "appelsiner") &  " er tillgjengelig fra lageret."

Endret av aadnk
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...