Public Sub txtIndirizzo_LostFocus()
txt = txtIndirizzo.Text
If Len(txt) > 2 Then
If f.TrovaNum(txt) = False Then
txt = txt & " "
Message.Info("Manca il numero civico!", "OK")
txtIndirizzo.Text = txt
txtIndirizzo.Pos = Len(txt)
txtIndirizzo.SetFocus
Endif
Endif
End
Il codice sopra esegue solo la riga txtIndirizzo.SetFocus dopo Message.Info. Se commento Message.Info invece esegue tutto il codice. Qualcuno mi sa dire perchè?
Ho risoltoooooo, basta spostarlo dopo le righe di codice di cui si vuole l'esecuzione.
txtIndirizzo.Text = txt
txtIndirizzo.Pos = Len(txt)
txtIndirizzo.SetFocus
f.Suona("beep.wav")
Message.Info("Manca il numero civico!", "OK")
Visto che ci sono e l'obiettivo era quello di impedire la digitazione di lettere in un textbox per numeri, in VB6 con keyascii=0 si annullava il tasto premuto e sul textbox non veniva visualizzato nulla, è possibile avere qualcosa di analogo in gambas?
Io userei l'Oggetto ValueBox !
Ad ogni modo, volendo usare il TextBox, si può proporre un codice come il seguente:
Public Sub TextBox1_Change()
Dim i As Integer
For i = 1 To Len(TextBox1.Text)
If IsLetter(Mid(TextBox1.Text, i, 1)) Then
Mid(TextBox1.Text, i, 1) = Null
TextBox1.Pos = i - 1
Endif
Next
End
Vuott, non uso il Valuebox perchè il contenuto non è formattabile: 1.550,30 mentre col textbox a livello di formattazione faccio quello che voglio. Comunque ispirandomi al tuo codice, ho risolto così:Public Sub txtImporto_Change()
Dim s As String
s = txtImporto.Text
If Len(s) > 0 Then
If Not IsNumber(s) Then
txtImporto.Text = ""
f.suona("chord.wav")
Endif
Endif
End
Visto che ci sono e l'obiettivo era quello di impedire la digitazione di lettere in un textbox per numeri, in VB6 con keyascii=0 si annullava il tasto premuto e sul textbox non veniva visualizzato nulla, è possibile avere qualcosa di analogo in gambas?
Se l'obbiettivo è quello di avere una casella con numeri divisi per migliaia e per decimali e senza la € allora propongo qualcosa di simile:
Public Sub TextBox1_KeyPress()
Dim iPos As Integer = TextBox1.Pos
Select Case Key.Code
Case Key.Left, Key.Right, Key.BackSpace, Key.Delete, Key.Enter, Key.Return, Key.Escape, Key.Home, Key.End, Key.Tab, Key.BackTab
Return
End Select
Select Case Key.Text
Case "0" To "9"
Return
Case ",", "."
If iPos = 0 Then Stop Event
Case Else
Stop Event
End Select
End
Public Sub TextBox1_LostFocus()
If TextBox1.Text <> Format(Val(TextBox1.Text), "#,###.00") Then
TextBox1.Text = Format(Val(TextBox1.Text), "#,###.00")
Balloon.Delay = 4000
Balloon.Warning("<b>Valore Riformattato</b>.\nControllane la correttezza", TextBox1)
TextBox1.SetFocus()
TextBox1.SelectAll()
Endif
End
Ciao ho risolto il problema solo numeri o dolo lettere in questo modo:
Public Function Numeri() 'solo numeri'
If Key.Code >= 48 And Key.Code <= 57 Then
Else If key.Code = key.BackSpace Then
Else If key.Code = key.Delete Then
Else If Key.Code = Key.Left Then
Else If Key.code = Key.Right Then
Else If Key.Code = Key.Tab Then
Else
Stop Event
End If
End
Public Function Lettere()
If Key.code >= 64 And Key.Code <= 90 Then
Else If key.Code = key.BackSpace Then
Else If key.Code = key.Up Then
Else If Key.code = Key.Down Then
Else
Stop Event
Endif
End
si ho letto...
Visto che ci sono e l'obiettivo era quello di impedire la digitazione di lettere in un textbox per numeri, in VB6 con keyascii=0 si annullava il tasto premuto e sul textbox non veniva visualizzato nulla, è possibile avere qualcosa di analogo in gambas?
se all'evento TextBox_KeyPress() usi la funzione che ho scritto, vengono escluse le lettere della tastiera :-\
se invece uso
Public Sub TextBox1_Change()
If TextBox1.text > "" Then
TextBox1.text = Format(Replace(TextBox1.Text, ",", Null) / 100, "0.00")
Endif
End
ho la virgola automatica