An object's Dispose method ostensibly destroys the object. It releases all the resources associated with that object, so you should call the Dispose method of every object that has one when you're finished with it. Note that any objects created in the designer will be Disposed when the form is Closed. Setting a variable does exactly what it implies: afterwards the variable refers to no object. Doing so is generally pointless because the vast majority of variables will lose scope soon afterwards and cease to exist anyway. The only time it is worthwhile setting a variable to Nothing is when the variable will not, or may not, lose scope for some time after you have no further use for it, like if the variable is a field (class-level variable) or a local variable in a long-running block of code. When you set a variable to Nothing, or a variable loses scope, that reference to the object is removed. When an object has no remaining references it is available for garbage collection, so the space it occupies in memory can be reclaimed. If you don't Dispose objects that support it then it will take at least two passes of the garbage collector to clean them up: one to Finalize the object (call the Finalize method, which implicitly calls the Dispose method) and another to reclaim its memory.
In short:
1. If an object has a Dispose method and you have no further use for that object then call the method.
2. If a variable refers to an object that you have no further use for, Disposed or not, and that variable will not or may not lose scope for some time then set that variable to Nothing.
Obviously if you have no further use for an object with a Dispose method and the variable that refers to it will not lose scope for some time you need to perform both these operations. In that case the Disposal must come first of course.