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.paint event 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.graphics object not want if want persist graphics, instead want use object obtained control.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