vb.net - Error: calling a sub(routine) from a different sub in VB -
i trying make program execute multiple times (instead of once when form loads); have tried through either user clicking button, or timer execute program again after has "ticked".
i have commented out code errors:
public class forml private sub form1_load(sender object, e eventargs) handles mybase.load end sub private sub form1_paint(byval sender object, byval e system.windows.forms.painteventargs) handles me.paint randomize() dim integer dim z integer z = rnd() * 25 = 0 2 dim intx integer = rnd() * 420 dim inty integer = rnd() * 420 dim tempbrush brush = new solidbrush(color.fromargb(rnd() * 255, rnd() * 255, rnd() * 255)) e.graphics.fillellipse(tempbrush, intx, inty, 2, 2) next end sub 'private sub timer1_tick(sender object, e eventargs) handles timer1.tick ' call form1_paint() 'end sub 'private sub btn1_click(sender object, e eventargs) handles btn1.click ' call form1_paint() 'end sub end class
what seemingly simple endeavour in case turns out easier few bits of background knowledge.
the
form1.paintevent raised whenever form deemed need re-paint, example if has been covered form. exercise, may not concerned more dots appearing code @ first appears produce. shall not address issue here.the
e.graphicsobject not want if want persist graphics, instead want use object obtainedcontrol.creategraphics.it recommended use .net framework random class instead of vb's
rnd().some classes use resources need disposed of, , have
.dispose()method. graphics objects tend (also database , file operations). can use using block take care of calling dispose you.
and important point:
- use option strict on. write code works pointing out errors can detect. set default new projects.
a couple more things should mention should take care when naming variables, , makes debugging easier separate things out own variables rather writing 1 long line of code.
for things timers, could drag timer onto drawing surface, find better create in code. way not have swap , forth between designer , code windows change parameters, , don't wonder "timer1" came from.
after that, came (not good) code:
option infer on option strict on public class form1 dim rand new random dim tim timer sub drawdots(sender object) ' sub have been called sender, check ' control dim self control = trycast(sender, control) if self nothing exit sub end if using g = self.creategraphics() dim ndots = rand.next(1, 26) dim circleradius = 20 = 1 ndots dim xloc = rand.next(0, 420) dim yloc = rand.next(0, 420) dim col = color.fromargb(rand.next(0, 256), rand.next(0, 256), rand.next(0, 256)) using br new solidbrush(col) g.fillellipse(br, xloc, yloc, circleradius, circleradius) end using next end using end sub sub drawdotsontimertick(sender object, e eventargs) drawdots(me) end sub private sub form1_paint(sender object, e painteventargs) handles mybase.paint drawdots(sender) end sub private sub button1_click(sender object, e eventargs) handles button1.click drawdots(me) end sub private sub form1_load(sender object, e eventargs) handles mybase.load tim = new timer tim.interval = 2000 addhandler tim.tick, addressof drawdotsontimertick tim.start() end sub end class
Comments
Post a Comment