Vraag & Antwoord

Programmeren

Nullen

7 antwoorden
  • Een vraagje: In een tekstvak heb ik een nummerieke code staan, die begint met nullen. Dit tekstvak leest hij de data uit een access bestand.. Hier staan de nullen wel voor, maar in visual basic niet.... hoe kun je programmeren dat de nullen in het tekstvak wel blijven staan? dus dat er in een tekstvak bv. 00021 staat i.p.v. 21! Alvast bedankt
  • Volgens mij kun je met een masked-edit control makkelijk voorloopnullen bij een numerieke waarde krijgen. Wat is het datatype in de database? Numeric of String? In het laatste geval wordt de waarde exact weergegeven zoals hij in de database staat. Als het numeric is, lijkt het me onwaarschijnlijk dat je in access wel voorloopnullen ziet.
  • datatype in de database = nummeriek ik heb zelf in access ingesteld dat de nummerieke waarden bestaat uit 4 cijfers.... zodoende staan daar wel voorloop nullen... (dit heb ik gedaan d.m.v. bij standaardwaarde 0000 in te vullen. Hierdoor komen er in access wel vier cijferig getal te staan.. bv. dus 0001, 0002 enz.) maar in visual basic komt er dan 1, 2 enz. te staan... Hoe kan ik dat doen?
  • Nou, met die masked edit control dus. Daarin kun je precies aangeven hoe iets ingevoerd, en omgekeerd., hoe iets gedisplayed moet worden.
  • Ik ben zelf niet zo dol op de masked edit control. Als jij een getal wilt hebben met voorloopnullen, dan zul je er een string van moeten maken. In onderstaand voorbeeld ga ik er even vanuit dat je het getal reeds hebt opgeslagen in de variabele intNummer. [code:1:bc09a438bd] Dim strNummer As String * 4 strNummer = "0000" strNummer = Left(strNummer, 4 - Len(CStr(intNummer))) & CStr(intNummer) [/code:1:bc09a438bd] Het masked edit control is wel handig als je de data nog wilt aanpassen, je kunt 'm namelijk zo maken dat je enkel nummers kunt ingeven. Echter ook dit kan met code (bij voorkeur in een algemene module): [code:1:bc09a438bd] 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& Public Sub OnlyNumbers(NumberText As TextBox, Flag As Boolean) Dim curstyle As Long Dim newstyle As Long curstyle = GetWindowLong(NumberText.hWnd, GWL_STYLE) If Flag = True 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 [/code:1:bc09a438bd] Met de code [code:1:bc09a438bd] Call OnlyNumbers(mijnTextbox, True) [/code:1:bc09a438bd] Zorg je ervoor dat er enkel nummers in die textbox kunnen. Roep je het aan met False, dan wordt het weer een normale textbox.
  • Mooie oplossing. Wat meer werk, maar wel netjes.
  • [quote:a75a4cd158="RubeL"] Het masked edit control is wel handig als je de data nog wilt aanpassen, je kunt 'm namelijk zo maken dat je enkel nummers kunt ingeven. Echter ook dit kan met code (bij voorkeur in een algemene module): [code:1:a75a4cd158] 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& Public Sub OnlyNumbers(NumberText As TextBox, Flag As Boolean) Dim curstyle As Long Dim newstyle As Long curstyle = GetWindowLong(NumberText.hWnd, GWL_STYLE) If Flag = True 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 [/code:1:a75a4cd158] Met de code [code:1:a75a4cd158] Call OnlyNumbers(mijnTextbox, True) [/code:1:a75a4cd158] Zorg je ervoor dat er enkel nummers in die textbox kunnen. Roep je het aan met False, dan wordt het weer een normale textbox.[/quote:a75a4cd158] Dit werkt alleen vanaf een bepaalde versie van de shell/common controls. Ik weet zo even niet meer welke versie. Bovendien vangt dit alleen de rechtstreekse 'karakterinvoer' af. Je kan gewoon ongeldige tekens in het tekstvak tevoorschijn krijgen door bijvoorbeeld het plakken (CTRL+V) van deze tekens uit het klembord.

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.