anoniem Geplaatst: 8 januari 2003 Delen Geplaatst: 8 januari 2003 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 Quote Link naar reactie
anoniem Geplaatst: 8 januari 2003 Auteur Delen Geplaatst: 8 januari 2003 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. Quote Link naar reactie
anoniem Geplaatst: 8 januari 2003 Auteur Delen Geplaatst: 8 januari 2003 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? Quote Link naar reactie
anoniem Geplaatst: 8 januari 2003 Auteur Delen Geplaatst: 8 januari 2003 Nou, met die masked edit control dus. Daarin kun je precies aangeven hoe iets ingevoerd, en omgekeerd., hoe iets gedisplayed moet worden. Quote Link naar reactie
anoniem Geplaatst: 8 januari 2003 Auteur Delen Geplaatst: 8 januari 2003 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. Quote Link naar reactie
anoniem Geplaatst: 9 januari 2003 Auteur Delen Geplaatst: 9 januari 2003 Mooie oplossing. Wat meer werk, maar wel netjes. Quote Link naar reactie
anoniem Geplaatst: 9 januari 2003 Auteur Delen Geplaatst: 9 januari 2003 [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. Quote Link naar reactie
anoniem Geplaatst: 12 januari 2003 Auteur Delen Geplaatst: 12 januari 2003 Het werkt met een masked-edit control... Maar als ik de data wijzig, zijn de voorloop nullen weer weg... nu heb ik zelf een oplossing bedacht, nl.: [code:1:62947e32cf] 'volgnummer, 1 optellen Form2.Txtvolgno.Text = Form2.Txtvolgno + 1 a$ = Form2.TxtVoorletters.Text 'Voorletters b$ = Form2.TxtJaar.Text 'Jaar c$ = Form2.Txtmaand.Text 'Maand d$ = Form2.TxtDatum.Text 'Datum e$ = Form2.Txtvolgno.Text 'Volgnummer 'uniek nummer samenstellen Form2.txtFields(4) = "Cd" & "-" & b$ & "." & c$ & "." & d$ & "." & Right("0000" & Form2.Txtvolgno, 4) & ""[/code:1:62947e32cf] Het werkt nu perfect, en allemaal bedankt voor jullie inspanning! Erwin Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen