Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 18 odgovora
  • 4.358 pregleda

Najnovija ↓

Samo numeric u InputBox? 12.07.2010. u 22:01 · pre 198 meseci #1
Treba mi rešenje za InputBox da prihvata unos samo numeric (i cele i decimalne brojeve) vrednosti sa tastature.

Imam već proceduru sa proverom da li je uneta vrednost numerik, i poništavanjem unosa ukoliko to nije slučaj, ali pošto se radi o kasi i unosu količina, zaključio sam da je to samo gubljenje dragocenog vremena... Dakle, kako uvesti restrikciju na unos slova i ostalih nenumeričkih znakova u InputBox-u?

Napominjem da InputBox pozivam na F12, nešto otprilike kao:
Code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF12
Me.Koliko = InputBox("KOLIČINA?", "Unesi koliko", 1)
End Select
End Sub
Re: Samo numeric u InputBox? 12.07.2010. u 22:25 · pre 198 meseci #2
Probaj sa OnChange polja i proveri IsNumeric(NazivPolja.Text) = True, npr.

Public dblPrethVrednost As Double '(na vrhu modula)

OnChange

If IsNumeric(NazivPolja.Text) = False Then
NazivPolja = dblPrethVrednost
Else
dblPrethVrednost = NazivPolja.Text
End If


Promenljiva dobija vrednost samo ako je unet broj, inače se vraća dotadašnja vrednost. Možda treba i da pozicioniraš kurzor na kraj unosa, ali to je ideja.

Na kraju unosa resetuj vrednost promenljive na Null (OnLostFocus).
Potpis
Pozdrav,
Branislav
Re: Samo numeric u InputBox? 12.07.2010. u 22:57 · pre 198 meseci #3
Ovo funkcioniše, ako se vrednost unosi u direktno u TextBox, ali to nije moj slučaj.

Da pojasnim, na glavnoj formi postoje dva TextBox-a. Jedan se zove txtKoliko, koji je lockovan (dakle nema OnChange, OnLostFocus itd) i čija je default vrednost = 1, a kasir je menja sa F12 (InputBox), ako želi ručno da unese potrebnu količinu za sledeći artikl. Unos se vrši kroz polje txtUnos, preko barkoda ili šifre, a onda se lista pakuje u nevezanu subformu ispod.

Dakle, nema direktnog unosa podataka u subformu, i artikli se upisuju samo preko jednog polja na glavnoj formi.
Re: Samo numeric u InputBox? 12.07.2010. u 23:11 · pre 198 meseci #4
Sad tek ne razumem. :)

Da li ti želiš da kontrolišeš ono što se kuca u InputBox-u? Ako je to, to ne može.
Potpis
Pozdrav,
Branislav
Re: Samo numeric u InputBox? 12.07.2010. u 23:17 · pre 198 meseci #5
Citat:
banem: Da li ti želiš da kontrolišeš ono što se kuca u InputBox-u?

Da, to je bilo pitanje i u naslovu teme :)
Citat:
Ako je to, to ne može.

Damn! :)
Re: Samo numeric u InputBox? 12.07.2010. u 23:25 · pre 198 meseci #6
A zašto si ne napraviš jednu malu formu na kojoj bi stavio txtbox i postavio format da se mogu unesti samo brojevi sa deimalama



nekako ovako

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
Case vbKeyF12
DoCmd.OpenForm "Unoskol", , , , , acDialog ' program čeka da se zatvori otvorena forma, NE izvrsava kod ispod
' na on close forme Unoskol napunis forms!glavnaforma.koliko= unesena vrijednost
' Me.Koliko = InputBox("KOLIČINA?", "Unesi koliko", 1)
End Select
End Sub


i rijesio si si sve muke

Re: Samo numeric u InputBox? 12.07.2010. u 23:30 · pre 198 meseci #7
Nikakav problem - imitiraj InputBox formom.
Potpis
Pozdrav,
Branislav
Re: Samo numeric u InputBox? 12.07.2010. u 23:41 · pre 198 meseci #8
OK ljudi, u pravu ste. Biće onda formica :)
Re: Samo numeric u InputBox? 29.07.2010. u 12:33 · pre 197 meseci #9
Function UnesiNumeric()
Dim Podatak As String


Start:
Podatak = InputBox("Unesi numerički podatak", "Num podatak", 0)
If IsNumeric(Podatak) Then
Else
GoTo Start
End If
end function
Potpis
zxz
Re: Samo numeric u InputBox? 29.07.2010. u 13:05 · pre 197 meseci #10
Zahvaljujem, mada, već na početku sam rekao da imam i koristim sličnu funkciju.

U stvari, namera mi je bila da napravim nešto po ugledu na program rađen u C# koji sam video. Tamo su pri unosu količina nenumerički tasteri zaključani, i ako korisnik pokuša da ih koristi, neće mu uspeti, a pritom se začuje i zvučno upozorenje iz PC spikera. To je u praksi zgodno kada je gužva na kasi, a kasir je sklonio pogled sa tastature i promašio numeričku tastaturu, ili isključio Num Lock i tako to, jer štedi dragoceno vreme.

Sve u svemu, nije nešto preterano bitno, pa može da ostane i ovako.
Re: Samo numeric u InputBox? 29.07.2010. u 13:15 · pre 197 meseci #11
Hm, nešto ne štima tu:

Function UnesiNumeric() As Double
Dim Podatak As String
Podatak = InputBox("Unesite broj", "Broj", 0)
If IsNumeric(Podatak) Then
UnesiNumeric = CDbl(Podatak)
Else
UnesiNumeric = 0
End If
End Function

Funkcija vraća nešto, Sub ne.
Potpis
Pozdrav,
Branislav
Re: Samo numeric u InputBox? 29.07.2010. u 15:26 · pre 197 meseci #12
Citat:
Tamo su pri unosu količina nenumerički tasteri zaključani, i ako korisnik pokuša da ih koristi, neće mu uspeti, a pritom se začuje i zvučno upozorenje iz PC spikera.

Mozda moze da se programski blokira numericka tastatura, sa onom OnKey eventima? Ne znam da li moze, samo ideja...

:-)
Re: Samo numeric u InputBox? 29.07.2010. u 16:44 · pre 197 meseci #14
Evo kod koji prepoznaje sta je otkucano i prihvata samo unapred definisane karaktere. Neka na formi imate text box po imenu Text0. KeyPress event ce odbiti sve zankove kojee ne zelimo da prihvatimo.
Code:

Private Sub Text0_KeyPress(KeyAscii As Integer)
Dim sList As String
sList = "1234567890,."
'Ovde definisamo znakove koje zelimo da prihvatimo
If InStr(sList, Chr(KeyAscii)) = 0 Then
    'Ako promenimo KeyAscii,
    'znak koji smo upravo uneli nece biti prikazan
    KeyAscii = 0
End If
End Sub


:-)
Re: Samo numeric u InputBox? 29.07.2010. u 16:50 · pre 197 meseci
izmenjeno 1 put, poslednji put smal 29.07.2010. u 17:04
  1. smal29.07.2010. u 17:04zapis iz teksta poruke
#15
Citat:
Zoran.Eremija: @smal, da li ste pogledali primer od ranije, ako se odlucite za svoju formu http://www.elitesecurity.org/t380325-0#2427961

Ma znao sam ja da može :) Što je najgore, jesam video taj primer, ali nisam skontao da tu ima ono što mi treba :)
Dodao sam samo još samo "Or KeyAscii = 46", da prihvata i decimalni zarez, i to mu je to.

Hvala!

Naknadno videh Zidarevo rešenje, i ono je super!

Opet mala dopuna - u ovom drugom rešenju nedostaje Backspace taster u listi. Kako to dodati?
nedostaje Backspace taster u listi. Kako to dodati? 29.07.2010. u 18:51 · pre 197 meseci #16
Code:

Private Sub Text0_KeyPress(KeyAscii As Integer)
Dim sList As String
'Ovde definisamo znakove koje zelimo da prihvatimo
'ACSII za Backspace = 8
sList = "1234567890,." & Chr(8)


If InStr(sList, Chr(KeyAscii)) = 0 Then
    'Ako promenimo KeyAscii,
    'znak koji smo upravo uneli nece biti prikazan
    KeyAscii = 0
End If

End Sub


Kyy_Press event moze da se odradi na nivou forme. To je u slucaju da imas vise ovakvih kontrola koje smeju da prime samo odredjene karaktere, pa da ne pises isti kod za svaku od njih.

:-)
Re: Samo numeric u InputBox? 29.07.2010. u 19:38 · pre 197 meseci #17
Hm, nešto se ipak čudno događa. Ako mi je izabrana Sr (Serbian Latin) tastatura, dozvoljava mi upis YU slova (čćšđž) u formu. Ako je tastatura En (USA), ne propušta unos ;'[]/ karaktera, koji su na istoj poziciji tastera.

U Zoranovom primeru nema toga, tj. restrikcija radi bez obzira na izbor tastature.
Re: Samo numeric u InputBox? 29.07.2010. u 23:11 · pre 197 meseci #18
Private Sub inputb_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case KeyCode
'
Case 48 To 57
'
Case 96 To 105
'
Case 188
'
Case 190
'
Case 110
'
Case 8
'
Case 46
'
Case Else
KeyCode = 0
End Select

End Sub
Potpis
zxz
Re: Samo numeric u InputBox? 30.07.2010. u 06:37 · pre 197 meseci #19
Kada koristiš proceduru na događaj On Key Down, onda treba postaviti osobinu Key Preview na Yes, inače se procedura neće odvijati. Ja koristim ovakav kod:
Code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyEscape:
                            KeyCode = 0
                            DoCmd.Close
        Case vbKeyTab:
                            KeyCode = 0
                            Me![Maloprodajne kalkulacije subform].SetFocus
        Case vbKeyDelete:
                            If var_knjizeno = True Then
                               KeyCode = 0
                            End If
        Case vbKeyF1:
                            KeyCode = 0
                            DoCmd.OpenForm "Help_poruka"
        Case vbKeyF2:
                            KeyCode = 0
                            Me![NoviDok].SetFocus
                            SendKeys "{ENTER}"
        Case vbKeyF3:
                            KeyCode = 0
                            Me![Pregled].SetFocus
                            SendKeys "{ENTER}"
        Case vbKeyF5:
                            KeyCode = 0
                            Me![Knjizenje].SetFocus
                            SendKeys "{ENTER}"
        Case vbKeyF6:
                            KeyCode = 0
                            Me![Brisanjeprok].SetFocus
                            SendKeys "{ENTER}"
        Case vbKeyF7:
                            KeyCode = 0
                            Me![BrisanjeDok].SetFocus
                            SendKeys "{ENTER}"
     Case vbKeyF10:
                            KeyCode = 0
                            Me![KnjiziGlavnu].SetFocus
                            SendKeys "{ENTER}"
    End Select

End Sub


Za bliže, pogledaj Keycode Constants u Helpu.
Potpis
https://mzahorjanski.wixsite.com/mzahorjanski
https://www.fiverr.com/miroljubzahorja?up_rollout=true
https://www.youtube.com/@miroljubzahorjanski


Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme