Znaci svi ostali unosi da se zabrane.
Samo numericka vrijednost u textbox u VB6? Kako najlakse?
Zaključano
Zakačeno
izmenjeno 1 put, poslednji put Aleksandar Ružičić 20.05.2007. u 22:57
Izmene poruke
- Aleksandar Ružičić20.05.2007. u 22:57zapis iz teksta poruke
Pokusaj ovako.
Imao sam negdje bas kod za ovo, potraziti cu, pa poslati.
krcko: dodati CODE tagovi
Code:
Private Sub TextBox1_Change()
Upit=TextBox1.Text
If Upit<>0 Or Upit<>1 Or Upit <>2 Then
TExtBox1.Text=""
End If
End Sub
Private Sub TextBox1_Change()
Upit=TextBox1.Text
If Upit<>0 Or Upit<>1 Or Upit <>2 Then
TExtBox1.Text=""
End If
End Sub
Imao sam negdje bas kod za ovo, potraziti cu, pa poslati.
krcko: dodati CODE tagovi
Potpis
steve585
izmenjeno 1 put, poslednji put Aleksandar Ružičić 20.05.2007. u 22:57
Izmene poruke
- Aleksandar Ružičić20.05.2007. u 22:57zapis iz teksta poruke
Nasao sam
Osim sto se omogucava samo unos brojeva ovaj kod brani unos vise od 5 karaktera.
krcko: dodati CODE tagovi
Code:
Private Sub Text7_KeyPress(KeyAscii As Integer)
Dim strValid As String
Dim Duzina
Duzina = Len(Text7.Text)
If Duzina > 4 And KeyAscii > 26 Then
KeyAscii = 0
End If
strValid = "0123456789"
If KeyAscii > 26 Then
If InStr(strValid, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If
End Sub
Private Sub Text7_KeyPress(KeyAscii As Integer)
Dim strValid As String
Dim Duzina
Duzina = Len(Text7.Text)
If Duzina > 4 And KeyAscii > 26 Then
KeyAscii = 0
End If
strValid = "0123456789"
If KeyAscii > 26 Then
If InStr(strValid, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If
End Sub
Osim sto se omogucava samo unos brojeva ovaj kod brani unos vise od 5 karaktera.
krcko: dodati CODE tagovi
Potpis
steve585
Ovo vam je mnogo bolje i brze jer izbegavate stalna proveravanja.
U deklaracionom delu forme stavite ove deklaracije funkcija
ili u nekom modulu ovo (da bi moglo da se koristi iz celog programa)
i onda u Load ili bolje Activate eventu forme stavite ovaj kod da promenite ponasanje text box-a
Ovo se izvodi samo jednom za razliku od ovih VB if-ova koji se izvode svaki put kad se pritisne taster.
Pozdrav
U deklaracionom delu forme stavite ove deklaracije funkcija
Code:
' Funkcije za promenu stila. textboxa napr
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const ES_NUMBER = &H2000&
' Funkcije za promenu stila. textboxa napr
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const ES_NUMBER = &H2000&
ili u nekom modulu ovo (da bi moglo da se koristi iz celog programa)
Code:
' Funkcije za promenu stila. textboxa napr
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_STYLE = (-16)
Public Const ES_NUMBER = &H2000&
' Funkcije za promenu stila. textboxa napr
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_STYLE = (-16)
Public Const ES_NUMBER = &H2000&
i onda u Load ili bolje Activate eventu forme stavite ovaj kod da promenite ponasanje text box-a
Code:
' txtDraw je ime text box-a
Dim lng As Long
lng = GetWindowLong(txtDraw.hwnd, GWL_STYLE)
SetWindowLong txtDraw.hwnd, GWL_STYLE, lng Or ES_NUMBER
' txtDraw je ime text box-a
Dim lng As Long
lng = GetWindowLong(txtDraw.hwnd, GWL_STYLE)
SetWindowLong txtDraw.hwnd, GWL_STYLE, lng Or ES_NUMBER
Ovo se izvodi samo jednom za razliku od ovih VB if-ova koji se izvode svaki put kad se pritisne taster.
Pozdrav
Potpis
HomePage http://www.eurora3d.com
Da li moze samo kratko pojasnjenje koda. Bar prvi dio sa "Declare ..."
Potpis
steve585
Prvo da se izvinem: Pogrijesio sam naslov teme. Nisam sjeo za komp i nesto pravio ima godina.. Nisam mislio na numericku nego na vrijednost koja se unosi kao kod kalkulatora. Znaci mora se moci unijeti i zarez ali samo jedan put i mora se omoguciti unos predznaka "-" na pocetku.
U svakom slucaju hvala!
Na osnovu onog prvog koda sam nesto sastavio:
Je li ovo o.k. ?
U svakom slucaju hvala!
Na osnovu onog prvog koda sam nesto sastavio:
Code:
Dim strValid As String
Dim intBroj As Integer
strValid = "0123456789,-"
If KeyAscii > 26 Then
If InStr(strValid, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If
If Len(Text7.Text) = 1 And Text7.Text = "-" And KeyAscii = 44 Then KeyAscii = 0
If Text7.Text = "" And KeyAscii = 44 Then
KeyAscii = 0
Else
For intBroj = 1 To Len(Text7.Text)
If InStr(1, Text7.Text, ",") > 0 Then
If KeyAscii = 44 Or KeyAscii = 45 Then
KeyAscii = 0
End If
End If
Next
End If
Dim strValid As String
Dim intBroj As Integer
strValid = "0123456789,-"
If KeyAscii > 26 Then
If InStr(strValid, Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If
End If
If Len(Text7.Text) = 1 And Text7.Text = "-" And KeyAscii = 44 Then KeyAscii = 0
If Text7.Text = "" And KeyAscii = 44 Then
KeyAscii = 0
Else
For intBroj = 1 To Len(Text7.Text)
If InStr(1, Text7.Text, ",") > 0 Then
If KeyAscii = 44 Or KeyAscii = 45 Then
KeyAscii = 0
End If
End If
Next
End If
Je li ovo o.k. ?
Probao sam kod i moguce je unjeti slova.
Potpis
steve585
Evo kako sam ja rijesio taj problem.
Znaci ako promjenjivoj C pokusas da dodijelis nesto drugo osim brojeva i zareza, pojavit ce se
greska i program ce otici na Nije_broj. To nije "najbolje" rjesenje ali funkcijonise.
Code:
Private Sub Text1_Change()
Dim C As Currency
On Error GoTo Nije_Broj
If Text1.Text <> "" Then
C = Text1.Text
End If
Exit Sub
Nije_Broj:
MsgBox "Mozete upisivati samo brojeve", 64, "Greska"
End Sub
Private Sub Text1_Change()
Dim C As Currency
On Error GoTo Nije_Broj
If Text1.Text <> "" Then
C = Text1.Text
End If
Exit Sub
Nije_Broj:
MsgBox "Mozete upisivati samo brojeve", 64, "Greska"
End Sub
Znaci ako promjenjivoj C pokusas da dodijelis nesto drugo osim brojeva i zareza, pojavit ce se
greska i program ce otici na Nije_broj. To nije "najbolje" rjesenje ali funkcijonise.
izmenjeno 1 put, poslednji put Aleksandar Ružičić 20.05.2007. u 22:59
Izmene poruke
- Aleksandar Ružičić20.05.2007. u 22:59zapis iz teksta poruke
Evo nesto nepopularno, ali radi. Iskoristi prvi kod, unositi ces samo cijele brojeve u TextBox bez zareza.
Postojecem kodu dodaj sljedeci kod
krcko: dodati CODE tagovi
Postojecem kodu dodaj sljedeci kod
Code:
Private Sub Text7_LostFocus()
Text7.Text = Round(Text7.Text / 100, 2)
Text7.Refresh
End Sub
Private Sub Text7_LostFocus()
Text7.Text = Round(Text7.Text / 100, 2)
Text7.Refresh
End Sub
krcko: dodati CODE tagovi
Potpis
steve585
Sve je to manje vise o.k. ali znaci moraju se moci upisivati i negativni brojevi, a zaokruzivanje ne smije biti unaprijed definisano tj. ako se pogrijesi mjesto zareza mora se moci jednostavno izbrisati. Znaci mora se moci upistai nesto ovako "-12555455,126796465"
Kao da imate na POS-u kolicinu ili cijenu koja moze ici u minus.(Sta cete nisam nikada POS napravio)
Kao da imate na POS-u kolicinu ili cijenu koja moze ici u minus.(Sta cete nisam nikada POS napravio)
Ovo ce da ti radi.
Prekopiraj kod u Formu i stavi na Formu jedan TextBox sa imenom Text1
Decimalni znak zavisi od regionalnih podesavanja Windowsa (kod nas je zarez).
Pozdrav
Prekopiraj kod u Formu i stavi na Formu jedan TextBox sa imenom Text1
Decimalni znak zavisi od regionalnih podesavanja Windowsa (kod nas je zarez).
Pozdrav
Code:
Dim str As String ' temp promenjiva
Private Sub Form_Load()
Text1.Text = ""
End Sub
Private Sub Text1_Change()
On Error GoTo err ' ako tekst ne moze da se pretvori u broj izazivamo error i idemo na err
Dim n As Double
n = CDbl(Text1.Text) ' ako je double izlazimo
Exit Sub
err:
Text1.Text = str ' ako je unet drugi znak tako da od teksta ne moze da se napavi broj
Text1.SelStart = Len(str) ' upisujemo zadnju tacnu vrednost teksta i namestamo kursor posle zadnjeg znaka
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
'uzimamo tekst pre nego sto je dodat novi znak
str = Text1.Text
End Sub
Dim str As String ' temp promenjiva
Private Sub Form_Load()
Text1.Text = ""
End Sub
Private Sub Text1_Change()
On Error GoTo err ' ako tekst ne moze da se pretvori u broj izazivamo error i idemo na err
Dim n As Double
n = CDbl(Text1.Text) ' ako je double izlazimo
Exit Sub
err:
Text1.Text = str ' ako je unet drugi znak tako da od teksta ne moze da se napavi broj
Text1.SelStart = Len(str) ' upisujemo zadnju tacnu vrednost teksta i namestamo kursor posle zadnjeg znaka
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
'uzimamo tekst pre nego sto je dodat novi znak
str = Text1.Text
End Sub
Potpis
HomePage http://www.eurora3d.com
Mislim da je ovako najjednostavnije
Može i kraće ako se izbace Exit Sub-ovi
i to će raditi, ali meni je profesionalna deformacija da volim sve eksplicitno da naglasim, što zbog preglednosti, što zbog sigurnosti, što zbog brzine, jer kad se jednom dobije ono što je traženo, bolje izaći iz procedure, jer tu nema šta više da se proverava... mada u ovom konkretnom slučaju sve to ne igra preveliku ulogu. Takođe, se uz manju intervenciju može postići da ne može da se upiše nula kao prvi broj, samo treba zameniti
sa
Code:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57 'ako je u pitanju bilo koji broj
Exit Sub
Case 45 'ako je minus
If Text1.SelStart <> 0 Then KeyAscii = 0 'ako nije na prvom mestu u textbox-u zabrani upis
Exit Sub
Case 44 'ako je zarez
If InStr(1, Text1.Text, ",") > 0 Then KeyAscii = 0 'dozvoli upis samo jednom
Exit Sub
Case 8 'ako je backspace
Exit Sub
Case Else 'u bilo kom drugom slucaju zabrani upis
KeyAscii = 0
End Select
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57 'ako je u pitanju bilo koji broj
Exit Sub
Case 45 'ako je minus
If Text1.SelStart <> 0 Then KeyAscii = 0 'ako nije na prvom mestu u textbox-u zabrani upis
Exit Sub
Case 44 'ako je zarez
If InStr(1, Text1.Text, ",") > 0 Then KeyAscii = 0 'dozvoli upis samo jednom
Exit Sub
Case 8 'ako je backspace
Exit Sub
Case Else 'u bilo kom drugom slucaju zabrani upis
KeyAscii = 0
End Select
End Sub
Može i kraće ako se izbace Exit Sub-ovi
Code:
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57 'ako je u pitanju bilo koji broj
Case 45 'ako je minus
If Text1.SelStart <> 0 Then KeyAscii = 0 'ako nije na prvom mestu u textbox-u zabrani upis
Case 44 'ako je zarez
If InStr(1, Text1.Text, ",") > 0 Then KeyAscii = 0 'dozvoli upis samo jednom
Case 8 'ako je backspace
Case Else 'u bilo kom drugom slucaju zabrani upis
KeyAscii = 0
End Select
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 48 To 57 'ako je u pitanju bilo koji broj
Case 45 'ako je minus
If Text1.SelStart <> 0 Then KeyAscii = 0 'ako nije na prvom mestu u textbox-u zabrani upis
Case 44 'ako je zarez
If InStr(1, Text1.Text, ",") > 0 Then KeyAscii = 0 'dozvoli upis samo jednom
Case 8 'ako je backspace
Case Else 'u bilo kom drugom slucaju zabrani upis
KeyAscii = 0
End Select
End Sub
i to će raditi, ali meni je profesionalna deformacija da volim sve eksplicitno da naglasim, što zbog preglednosti, što zbog sigurnosti, što zbog brzine, jer kad se jednom dobije ono što je traženo, bolje izaći iz procedure, jer tu nema šta više da se proverava... mada u ovom konkretnom slučaju sve to ne igra preveliku ulogu. Takođe, se uz manju intervenciju može postići da ne može da se upiše nula kao prvi broj, samo treba zameniti
Code:
Case 48 To 57 'ako je u pitanju bilo koji broj
Case 48 To 57 'ako je u pitanju bilo koji broj
sa
Code:
Case 48
If Val(Text1.Text) = 0 Then KeyAscii = 0
Case 49 To 57 'ako je u pitanju bilo koji broj
Case 48
If Val(Text1.Text) = 0 Then KeyAscii = 0
Case 49 To 57 'ako je u pitanju bilo koji broj
Potpis
-Odracuonogakomijedrpiorazmaknicu.
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti
Hvala Vam svima puno! Ovo mi je puno pomoglo. Ipak ja ne mogu to tako jednostavno kao profesionalci, ja to zakomplikujem pravo.
P.S.
Pored toga sto mi je pomoglo ovaj kod cu da nabijem na nos jednom programeru koji mi nije htjeo pomoci. Zastitio to u svom programu tj. napravio ActivexControl sa imenom firme od toga.
Jos jednom hvala!
P.S.
Pored toga sto mi je pomoglo ovaj kod cu da nabijem na nos jednom programeru koji mi nije htjeo pomoci. Zastitio to u svom programu tj. napravio ActivexControl sa imenom firme od toga.
Jos jednom hvala!
@Ero s ovoga sveta
radim u vs2005 i morao sam promijeniti currency (ne prepoznaje) u decimal (automatski prijedlog, tj integer - moj izbor) i sve radi super, samo bi mi trebalo da dodam jos mogucnost unosa znaka "/" i "-".
kako to napraviti?
thx
radim u vs2005 i morao sam promijeniti currency (ne prepoznaje) u decimal (automatski prijedlog, tj integer - moj izbor) i sve radi super, samo bi mi trebalo da dodam jos mogucnost unosa znaka "/" i "-".
kako to napraviti?
thx
Obrati se na forumu .NET
Pa sa tim rešenjem koje si izabrao, nikako. Inače je namerno izazivanje errora da bi zabranio neki unos totalno nepraktičan pristup. Dakle, hendluj svaki uslov zasebno i tako ćeš imati kontrolu nad tim charovima. pogledaj ono moje rešenje, zatim pronađi ASCII vrednosti za te charove koji ti trebaju i dodaj izuzetke sa CASE (kao što sam dodao za zarez, minus i slično).
Potpis
-Odracuonogakomijedrpiorazmaknicu.
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti
Probao sam prvo tvoje rjesenje i ne radi, tj mogu upisati bilo koji znak u to polje..samo ne znam zasto.
@bukwa ovdje se raspravlja o VB6 a ti radis u vs2005.
Potpis
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
da, znam...postavio sam pitanje u .net sekciji ali sam odgovorio Marku kad mi je vec ponudio rjesenje...moje isprike ako sam pogrijesio
Pa ja sam ti skrenuo pažnju na rešenje koje je u VB6, misleći da ćeš umeti to da prilagodiš VB.NET-u kad već radiš u njemu, a ionako nije neka velika razlika u pitanju. Sve što treba jeste da zameniš Select Case KeyAscii sa Select Case Asc(e.KeyChar), a tamo gde piše KeyAscii = 0 staviš e.KeyChar = "", a umesto Text1.SelText, staviš Text1.SelectionText (ili kako ti se već zove textbox kontrola) i to je to. Takođe, ne znam tačno šta pokušavaš da napraviš, ali postoje i druge opcije. Recimo, ako unos mora da bude u odgovarajućem formatu koji je uvek isti, možeš da iskoristiš MaskedTextBox. Ako je bilo kakva numerička vrednost, imaš NumericUpDown koja će ti dozvoliti isključivo korišćenje numeričkih vrednosti i decimal separatora i naravno backspace. Ako je u pitanju unošenje datuma (pošto vidim pominješ neke kose crte), onda možeš da iskoristiš DatePicker. Što bi se reklo, right tool for the right job ;)
Potpis
-Odracuonogakomijedrpiorazmaknicu.
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti
-Ne rxdi mi txstxturx, kxd god hocu dx
ukucxm "x" onx ukucx "x".
-Ko kaaz e da ja neuummem da kuuca
m.
-Piše "Insert disk 3", a jedva sam i ova
dva ugurao u drajv
-Postoje samo dve osobe kojima
verujem, jedna sam ja, a druga nisi ti