Archief - [PROG]VB.net vraagje over buttons

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

_DKsissor_

Legacy Member
weet er iemand hoe het mogelijk is om als je bv drie buttons hebt dat als er op eentje wordt geklikt dat hij op een andere plaats verschijnt en dat terwijl deze plaats afhankelijk is van wanneer hij aangeklikt is. Bv de eerste button waarop geklikt wordt moet naar linksonder, de tweede daarnaast etc...
kdacht om met een soort tellertje de clicks bij te houden en zo afhankelijk van de waarde vd teller zn positie te bepalen maar kweet niet echt hoe daaraan te beginnen. Moet je dan in elke button hetzelfde script zetten van dat als a = 1 , die positie , a = 2 die positie. Want zo ga ik echt gigantisch veel code krijgen.

Recipe4hate

Legacy Member
Zou je niet gewoon een simpele integer gebruiken die waarde 1, 2 of 3 bijhoudt?

_DKsissor_

Legacy Member
volgens mij wel maar online vindk niet echt iets handigs , btw kga het houden dat enkel de eerste button die aangeklikt wordt moet verplaatsen , is dat dan te doen door in elke button iets te zeggen van als a gelijk is aan 1 dan verplaatse nnaar die positie. en a bij elke klik laten verhogen zodat enkel bij de eerste hij verplaatst. of zijn daar makkelijkere manieren :)
ja kben nogal een noobje hierin :(

Recipe4hate

Legacy Member
In vb gebruik je top en left op x en y-waardes op te geven.
Ook denk ik dat het gebruik van de sender nieuw is voor je.
Wat je normaal zou doen is: aan 3 buttons 1 subroutine geven die hetzelfde doet. Ik gebruik gewoon dezelfde code voor alle 3 buttons, maar het principe is idem. Moest je het niet snappen, dan kan ik altijd even de code meer uitschrijven.

Het enige wat niet wordt opgevangen is het feit dat je 2 keer op 1 button kan klikken, maar dat is simpel op te lossen met een boolean.
Het is misschien niet de meest simpele/correcte code, but it gets the job done :p

http://users.pandora.be/office_review/tshirt/Buttontest.rar

_DKsissor_

Legacy Member
kbegrijp het ongeveer. Enkel die case select vindk beetje vreemd nooit van die functie gehoord , wat doet die precies. en die declaratie van die sender kan je die miss ook een beejte uitleggen.

Recipe4hate

Legacy Member
De select case is een meervoudige keuzeoptie.
Je kan dit het best vergelijken met een genestelde if. De case gaat kijken naar de waarde van een object. En overloopt dan zijn opties van boven naar onder. Dat is zeer belangrijk, want als de case een optie heeft uitgevoerd sluit hij deze af. Je moet dus opletten bij getallen om de volgorde te bepalen (zeker met groter dan, kleiner dan, blablabla).
De senderdeclaratie is nodig omdat (wij wel) de machine op dat moment niet weet welk object er is aangesproken, maw, hij kan niet weten dat het een button is. Daarom converteer ik de sender naar een buttonobject (ctype (object, nieuwtype). Deze conversie wordt niet zo vaak gebruikt omdat de basisvariabelen simpel geconverteerd kunnen worden via cInt bijvoorbeeld.

_DKsissor_

Legacy Member
heel fel bedankt :). Kheb wat zitten prullen aan de code omdat ik toch niet letterlijk hetzelfde wou overnemen als je zei want zo klakkeloos overschrijven leer je ook niet veel mee en kheb nu m'n scriptje aangepast in.

Code:
Private Sub PictureBox16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox16.Click
        If verplaatsing = True Then
            PictureBox16.Left = 120
            PictureBox16.Top = 650
            verplaatsing = False
            PictureBox16.Enabled = False
        Else

            PictureBox16.Visible = False

        End If
En dat bij elke button. Vanboven in m'n main programma heb ik verplaatsing als True gezet maar wat ik me nu afvraag is. Wordt die verplaatsing bij elke nieuwe click opnieuw naar true gedeclareerd of blijft hij false door de constructie in m'n iflus. Zonee is het mogelijk die verplaatsing = false als een soort final te declareren die niet meer kan veranderen achteraf. Het blijkt te werken m'n programma maar dat komt omdat al m'n buttons er hetzelfde uitzien , kzie dus niet het verschil als ze allemaal verplaatsen naar die positie of als ze verdwijnen. Heel fel bedankt al :) Kben al goed op weg geholopen hier ( die PictureBox.Enabled staat er omdat eens de button verplaatst is je er niet mere op mag kunnen klikken want dan gaat hij ook verdwijnen en dat wil ik niet :p

Recipe4hate

Legacy Member
Neen aan dat codeblok te zien blijft je verplaatsing op false staan.
Omdat deze bool globaal gedeclareerd is, wordt deze dus niet iedere keer als je het click-event gebruikt gedeclareerd. Dit wil dus zeggen dat de bool een keer zijn waarde krijgt bij declaratie en dat het daarna aan jou is om deze te wijzingen door code. Dit principe noemt met scope of levensduur van de variable. Alles hangt er dus vanaf waar je de variabele declareert. In een subroutine declareren zal je dus enkel in die sub toegang geven tot de variabele en ze wordt dan ook gedestroyed na afloop van de sub. Iedere keer als je die sub opnieuw oproept, zal deze variabele opnieuw worden gedeclareerd met initialisatiewaarde. Aangezien jij de bool op een hoger niveau declareert wordt deze nooit in een sub gedestroyed en zal ze dus ook niet 'resetten'
Ik hoop dat je dit begrijpt, want het is niet zo simpel om het variabelenprincipe met scope uit te leggen.

_DKsissor_

Legacy Member
mja kdenk wel dat ik het snap. Is ongeveer hetzelfde als private en public variabelen bij java die telkens opnieuw gedeclareerd worden als je een methode opnieuw laat beginnen. Maar je bent echt al hartelijk bedankt :d Heb het grafische van m'n project nu toch al in orde :d nu wat knutselen met rijen en randoms:d
heel fel bedankt al :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan