[VB] Object meegeven in functie aanroep

Pagina: 1
Acties:
  • 69 views sinds 30-01-2008

  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
Ik heb een functie geschreven die van een regel uit een tekstfile een ip adres leest.

zo'n regel ziet er zo uit. [naam]=12.12.34.5
De funtie zorgt er voor dat alles na het '=' teken wordt meegenomen verderop in de functie.
Het doel van de functie is om dit ip adres te laten zien in 4 tekstvelden (controlled array). Alleen lukt het niet om deze velden de getallen te laten zien. Wat doe ik verkeerd
code:
1
2
3
4
5
6
7
8
9
Sub FitIp(ByRef item As String, ByRef regel, ByVal teller)
    Dim ip() As String
    regel = Chop(regel, "=")     'Chop retourneert alles achter het =teken
    ip = Split(regel, ".")
    For i = 0 To UBound(ip)
        item = item + "(" + CStr(i) + ").text"
        MsgBox item
    Next i
End Sub

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

ehm als eerste zet je de string ip nergens in. En wat je in het for lusje wilt doen begrijp ik ook niet helemaalt .... (je zit nu trouwens ook je regel aan te passen, terwijl dit een externe variabele is, lijkt me niet zo handig!)

If you are not wiping out you are nog pushing enough...


  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
ip wordt later gebruikt om een stuk van het ip adres in een van de vier tekst velden te zetten. Tekstvelden zijn een controlled array, dus (0)...(3)
Deze 4 velden wilde ik gaan vullen dmv een for loop.
Maar ik wil eerst gewoon met deze functie het voor elkaar krijgen dat ik bijvoorbeeld de naam van een tekstveld meegeef en dat de functie in staat is om daar tekst in te zetten.

dus dan zou het zoiets moeten zijn, denk ik dan:
[code]
Sub FitIp(ByVal tekstveld, ByVal regel)
Dim ip() As String
regel = Chop(regel, "=") 'Chop retourneert alles achter het =teken
ip = Split(regel, ".") 'ip heeft nu vier array elementen (0-3)
'nu wil ik ip(0) in het eerste tekstveld (txtIPadres(0) zetten.
'tekstveld heb ik meegegeven met de aanroep
'hoe nu verder?
'tekstveld.text = .... 'gaat niet werken :(
'wie?

End Sub

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

(je zit nu trouwens ook je regel aan te passen, terwijl dit een externe variabele is, lijkt me niet zo handig!)
Wel het idee bij ByRef...

Maar wat TS doet, dat kan dus niet. wat jij wilt is item(i).Text = "blabla". Je kunt beter een array van Texboxes meegeven en die langsfietsen.

oogjes open, snaveltjes dicht


  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
Maar het is toch een array van tekstfields? dan zou dat toch niet moeten uitmaken.
Ik snap er geen reet meer van.
alleen maar een stomme functie om een ip adresje in tekstfields te zetten.
Don Facundo schreef op 29 oktober 2002 @ 13:24:
[...]


Wel het idee bij ByRef...

Maar wat TS doet, dat kan dus niet. wat jij wilt is item(i).Text = "blabla". Je kunt beter een array van Texboxes meegeven en die langsfietsen.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

Je geeft een string, variant en variant mee. Erg basic , begin eens bij het begin, koop een beginners boek ofzo.

oogjes open, snaveltjes dicht


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Je geeft gewoon het ip adres mee aan de functie (danwel afgesplitst of niet van de [...]= ). Vervolgens lees je tot de eerste . en zet wat je hebt in het eerste tekst veld, etc etc voor alle tekstvelden.

dus iets van

code:
1
2
3
4
var
  ip : string;

pak eerste deel van ip en zet in textbox1.text; etc

If you are not wiping out you are nog pushing enough...


  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
dit is de code die ik nu gebruik, maar aangezien er in mijn applicatie meer van dit soort dingen zijn, wil ik er een functie van maken:
code:
1
2
3
4
5
6
Line Input #1, regel
  regel = Chop(regel, "=")
  ip = Split(regel, ".")
   For i = 0 To UBound(ip)
     frmStart.txtIPklant(i).Text = ip(i)
   Next i


Deze code werkt gewoon, maar nu wil ik dit dus in een functie hebben.
>>>
Je moet eens weten hoeveel boeken ik al heb doorgenomen van Visual Basic. :(
Van msdn wordt ik ook al niet meer wijzer.

  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
Pinda schreef op 29 oktober 2002 @ 13:51:
Je geeft gewoon het ip adres mee aan de functie (danwel afgesplitst of niet van de [...]= ). Vervolgens lees je tot de eerste . en zet wat je hebt in het eerste tekst veld, etc etc voor alle tekstvelden.

dus iets van

code:
1
2
3
4
var
  ip : string;

pak eerste deel van ip en zet in textbox1.text; etc
Maar dat betekent dat ik in de code van de functie zelf hard gecodeerd de naam van de bestemming moet aangegeven. En dat wil ik dus niet, omdat ik deze functie voor meer andere textfields moet gaan gebruiken.

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Oke, dit was dus pseudocode, wat mij betreft geef je een array mee met editfields en zet je er een for lus omheen.

If you are not wiping out you are nog pushing enough...


  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
Pinda schreef op 29 oktober 2002 @ 14:00:
Oke, dit was dus pseudocode, wat mij betreft geef je een array mee met editfields en zet je er een for lus omheen.
Fijn dat je het snapt, maar hoe implementeer ik dat?

txtIpklant is een controlled array van (0) - (3)
Laten we zeggen dat ik de functie aanroep.

call FitIp("frmStart.txtIpklant", regel)

Hoe zorg ik dat de functie kan outputten naar het opgegeven tekstveld?
aangezien ik een string meegeef, moet de functie er zelf nog "(index_nummer).text" toevoegen en dan moet het ip deel er ingezet worden.
Als jij mij daarmee kan helpen, dan ben ik blij :)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

Er zijn natuurlijk verschillende oplossingen, maar persoonlijk zou ik denk ik voor iets gaan als:
CIp: class met de gegevens van 1 ip adres
CIps: collectie-class voor CIp

En een aparte class of functie die dat bestand uitleest, en de CIps collection vult, en die teruggeeft. En vervolgens in de form doen wat je met het ip wilt doen.
Oh ik ga er vanuit dat je meerdere ip adressen wilt uitlezen, als je er altijd maar eentje hebt, kun je die collection weglaten, beetje overdreven (das net zoiets om een string array aan te maken om vervolgens alleen het 1e item te gebruiken :)).

En als je geen zin hebt om er een classje voor te gebruiken, kun je de functie een array als parameter (byref) meegeven, en die array vullen. En in de form vervolgens doen wat je ermee wilt doen :)

Exact expert nodig?


  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Mickman schreef op 29 oktober 2002 @ 14:07:
[...]


Fijn dat je het snapt, maar hoe implementeer ik dat?

txtIpklant is een controlled array van (0) - (3)
Laten we zeggen dat ik de functie aanroep.

call FitIp("frmStart.txtIpklant", regel)

Hoe zorg ik dat de functie kan outputten naar het opgegeven tekstveld?
aangezien ik een string meegeef, moet de functie er zelf nog "(index_nummer).text" toevoegen en dan moet het ip deel er ingezet worden.
Als jij mij daarmee kan helpen, dan ben ik blij :)
je kunt dan zeggen txtIpKlant(0).Text := eerste deel tot aan eerste punt
txtIpKlant(1).Text := tweede deel ....

Dit zou kunnen of:

for i = 0 to 3 do
begin
txtIpKlant(i).Text := deel i van het ip adres
end'

B)

If you are not wiping out you are nog pushing enough...


  • Mickman
  • Registratie: Juni 2001
  • Laatst online: 29-03 18:11
OK, maar hoe zorg ik dat wanneer ik het ontvangende object dat meegegeven wordt in de aanroep van de functie, ook daadwerkelijk in de functie aangesproken kan worden.

dus niet dat je zelf hard txtIpKlant(i).text codeert in de functie, want dat zou betekenen dat ik voor elk tekst veld dit er in moet zetten, en dat is nu juist de rede waarom ik een functie wil maken.

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

dat hoeft toch niet je geeft txtIpKlant ByRef door, de i is ander bij iedere lusingang. (Ik kan zo niet een VB code ophoesten daarvoor is het al te lang geleden). Kijk anders even en de MSDN libs....

If you are not wiping out you are nog pushing enough...


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:17

mulder

ik spuug op het trottoir

Private Sub(txt As textBox)
txt.Text = "bla"
End Sub

Pardon me, maar RTFM

oogjes open, snaveltjes dicht


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

*kuch* nou wil ik niet bijdehand lopen doen, maar waarom zou je je oplossing zoeken in iets "vies" als textboxjes-arrays meegeven, terwijl je net zo makkelijk een string array (of class) mee kunt geven? Wat nou als je straks het ip niet alleen in een textbox wil laten zien, maar ook op een label.. 2e functie? "As Object" van maken en opvragen wat voor type object het is, en afhankelijk daarvan de .Text of .Caption zetten? (en wat nou als je t daarna ook in een listview wilt zetten...).

(en verder is het wel redelijk rtfm dat kan ik met Don alleen maar eens zijn).

Exact expert nodig?


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 29-08 22:51

D2k

zie Crazy_D

Doet iets met Cloud (MS/IBM)

Pagina: 1

Dit topic is gesloten.