Toon posts:

[vb] left() probleempje

Pagina: 1
Acties:

Verwijderd

Topicstarter
voor school moes ik een rekenmachien maken, maar nu kwam ik op een probleem waar de leraar ook niet uitkwam :+

Bij de +/- knop om het getal negatief of positief te maken, gebruikte ik de functie:
code:
1
2
3
4
5
     If (Left(Display.text, 1) = "-") Then
         Left(display.text, 1) = ""
     Else
         display.text = "-" & display.text
     End If

Als ik met deze code op de +/- knop druk krijg ik een error "Object required".

We hadden ook nog een andere optie gebruikt maar die weet ik niet meer uit mn hoofd, en die was volgens de leraar ook fout.

Weet iemand het probleem??

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 12:14

Crazy D

I think we should take a look.

Op donderdag 07 maart 2002 16:34 schreef unknownjim het volgende:
Left(display.text, 1) = ""
Dat mag bij mijn weten niet...
Probeer voor de gein eens iets met de Right$ functie te verzinnen :)

Exact expert nodig?


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
object required dan gebruik je ergens een naam die niet bestaat.. typfoutje ofzo meestal.. waar spring ie heen als je op debug drukt??
code:
1
Left(display.text, 1) = ""

dit kan niet lijkt mij..

Verwijderd

Topicstarter
Tja, mn leraar bedagt ook dat dat niet mog, maar een andere oplossing wis hij niet. en met Right kan het niet, want ik weet niet van te voren hoe groot display.text is, maar kan ik dan mishcien met Len() werken om de lengte vast te stellen en dan met right() werken?, maar waarom zou dit wel werken en niet met left() ??

Verwijderd

Topicstarter
Op donderdag 07 maart 2002 16:41 schreef devv05 het volgende:
object required dan gebruik je ergens een naam die niet bestaat.. typfoutje ofzo meestal.. waar spring ie heen als je op debug drukt??
code:
1
Left(display.text, 1) = ""

dit kan niet lijkt mij..
Tja, ik heb al gekeken waar dat aanligt, maar als ik STOP na If (Left(Display.text, 1) = "-") Then dan werkt het, en hier heb ik ook Display.text met hoofdletter, dus dat is goed getypt :?

  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Op donderdag 07 maart 2002 16:41 schreef unknownjim het volgende:
Tja, mn leraar bedagt ook dat dat niet mog, maar een andere oplossing wis hij niet. en met Right kan het niet, want ik weet niet van te voren hoe groot display.text is, maar kan ik dan mishcien met Len() werken om de lengte vast te stellen en dan met right() werken?, maar waarom zou dit wel werken en niet met left() ??
Omdat je met left alleen het linker teken om wil zetten, en dat kan gewoon niet.. Je zou het idd wel met len() kunnen doen denk ik..

Iets als:
code:
1
2
grootte = len(display.text) - 1
uitkomst = right(display.text, grootte)

oid..

Dan pakt ie het achterste aantal, op de voorste na.. (die -1 dus)

  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Op donderdag 07 maart 2002 16:44 schreef unknownjim het volgende:

[..]

Tja, ik heb al gekeken waar dat aanligt, maar als ik STOP na If (Left(Display.text, 1) = "-") Then dan werkt het, en hier heb ik ook Display.text met hoofdletter, dus dat is goed getypt :?
Ja dat is niet zo gek.. Als je stop doet dan voert ie die (foute) regel daaronder niet uit, dus geeft ie ook geen error.. Maar dan doet ie niet wat jij wilt..

  • Xanion
  • Registratie: Augustus 2001
  • Laatst online: 03-08 20:18
Op donderdag 07 maart 2002 16:34 schreef unknownjim het volgende:
voor school moes ik een rekenmachien maken, maar nu kwam ik op een probleem waar de leraar ook niet uitkwam :+

Bij de +/- knop om het getal negatief of positief te maken, gebruikte ik de functie:
code:
1
2
3
4
5
     If (Left(Display.text, 1) = "-") Then
         Left(display.text, 1) = ""
     Else
         display.text = "-" & display.text
     End If

Als ik met deze code op de +/- knop druk krijg ik een error "Object required".

We hadden ook nog een andere optie gebruikt maar die weet ik niet meer uit mn hoofd, en die was volgens de leraar ook fout.

Weet iemand het probleem??
Maak van de left eens left$, anders wordt de uitkomst een variant ipv een string. En volgens mij mag je een variant niet in een textveld zetten zonder eerst te converteren.

There are 10 types of people in the world: Those who understand binary, and those who don't. .


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 12-09 20:33

Super_ik

haklust!

code:
1
2
3
4
5
     If (Left(Display.text, 1) = "-") Then
         display.text = right(display.text, len(display.text)-1) = ""
     Else
         display.text = "-" & display.text
     End If

rare leraar hebben jullie, als ie dit al nie weet :?

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • .GoO
  • Registratie: September 2001
  • Laatst online: 26-08 10:06
Op donderdag 07 maart 2002 16:56 schreef Super_ik het volgende:

rare leraar hebben jullie, als ie dit al nie weet :?
Idd.. Maar tis middelbare school gok ik (gezien zn leeftijd) en daar zijn de leraren meestal niet zo geweldig (bij mij toen ik op de HAVO zat iig niet)

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 14:48

johnwoo

3S-GTE

Dit:
code:
1
2
3
4
5
     If (Left(Display.text, 1) = "-") Then
         display.text = right(display.text, len(display.text)-1) = ""
     Else
         display.text = "-" & display.text
     End If

kan beter zo: :P
code:
1
2
3
4
5
     If (Left$(Display.text, 1) = "-") Then
         display.text = mid$(display.text, 2)
     Else
         display.text = "-" & display.text
     End If

Is net ff wat efficienter :) Daarnaast zou je eigenlijk achter al die functies het string karakter moeten zetten (dus Left$ ipv Left), anders krijg je een Variant terug, en dat vertraagt ook (een beetje ;) ) aangezien je dan eigenlijk twee impliciete casts doet.
Ow, en daarnaast had je die = "" nog laten staan op het eind :+

[edit] Het mooiste zou trouwens zijn om de al dan niet negatieve state van het getal apart te onthouden. Ik zou zelf gewoon het getal als double ofzo opslaan, en telkens als dat verandert de display bijwerken. Je kan dan ook meteen aan het getal zien of het negatief is :) Scheiden van Model en View heet dat :)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 12-09 20:33

Super_ik

haklust!

uhm, ja dit is zo simpel dat ik er nie echt naar gekeken heb
maar idd, ik zou dit heeeeel anders doen dan zo, maargoed :+ daar ging t nie om, en die jonge is zo meer geholpen, dan dat iedereen zou zeggen hoe t allemaal wel en niet moet :)

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


  • Adion
  • Registratie: Januari 2001
  • Laatst online: 05-09 08:09
Ik weet niet waarom dit nog niet gezegt is, maar waarom niet gewoon :
code:
1
Display.Text = Str(-(Val(Display.Text))

?

Die Str moet er zelfs eigenlijk niet bij...

VirtualDJ 2026 - Fast Image Resizer - Instagram


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 14:48

johnwoo

3S-GTE

Op donderdag 07 maart 2002 18:51 schreef Adion het volgende:
Ik weet niet waarom dit nog niet gezegt is, maar waarom niet gewoon :
code:
1
Display.Text = Str(-(Val(Display.Text))

?

Die Str moet er zelfs eigenlijk niet bij...
- Ook al laat je die Str() weg, dan nog zit er een impliciete conversie naar string in.
- Je kunt beter Str$ dan Str gebruiken (zie mijn post n stukje hierboven) dat scheelt NOG een extra conversie.
- Het omrekenen naar double waarde, negaten, en vervolgens weer omrekenen naar string kost veel cycletjes (OK negaten niet, maar die conversies wel), meer dan het kopieëren van een paar bytes in het geheugen (wat Mid$ doet).

Het grbuiken van Str$ lijkt me wel gerechtvaardigd als je de waarde van je berekening telkens blijft opslaan als double, omdat je dan weer andere voordelen hebt (je kan gelijk gaan rekenen met die waarde zonder hem eerst uit de textbox te moeten halen) en je netjes je Model en View scheidt.

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


Verwijderd

Topicstarter
Voor alle duidelijkheid:
Ik doe de ICT opleiding, dus MTS

Enne we wisten dat et kon met right() en len() kon maar ik en de leraar vonden het raar dat het met left() niet werkte en daar kwamen wij dus niet uit!..

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 11-09 20:55

Skinny

DIRECT!

Dit werkt bij mij ook gewoon goed ... lijkt mij simpeler
code:
1
2
3
4
5
Private Sub cmdToggle_Click()

Me.Display.Text = Me.Display.Text * -1

End Sub

Dit even afgezien van de Typen.. Je kan altijd nog wat typecasting doen, als dat nodig mocht zijn.

SIZE does matter.
"You're go at throttle up!"


Verwijderd

Topicstarter
nog een paar kleine vraagjes aan skinny:
verklaar de regel:
code:
1
Me.Display.Text = Me.Display.Text * -1

waar staat de Me voor, en waarvoor *-1 ?

  • Skinny
  • Registratie: Januari 2000
  • Laatst online: 11-09 20:55

Skinny

DIRECT!

"Me" refereert naar het Form waar de knop zich op bevind. Eventueel kun je dit dus weglaten (Zoals in je 1e post)

Redenering :
code:
1
2
+ Getal * -1 = - Getal  (plus maal min = min)
- Getal * -1 = + Getal  (min  maal min = plus)

SIZE does matter.
"You're go at throttle up!"


Verwijderd

Topicstarter
Oke dan!
hartsikke bedankt allemaal voor de reply's

ik kan et aleen niet uitproberen, want ik had alle code getypt op school, en ik ging de code printen, en toen ik trg kwam was et weg :( ...

maar ik zal et onthouden voor de volgende x!!
Pagina: 1