Jul 17, 2003
How to create an instance of a form if it is not know in advance which formtype has to be opened. If you want to skip the chitchat: the .NET code example is at the end of this post. First the Symantec: when we create a new form, this form has a name. If we refer to that name, we actually refer to the name of the type of object that is just created. When to use of course when reading the subject you might think: why not just pass the form to a parameter that takes a form (or control/object)?
View 4 Replies
The answer is: you don't when it is not sure, when or if a new instance of the object has to be created or, as mentioned, when the procedure is called it is not known which class has to be created. You could of course hold a bunch of created objects, but that would be a shameless misuse of memory. Imagine the following scenario (seen something like this in a post, but can't find it anymore):
You have a class that is able to trap an event, say the doubleclick of a textbox, and has to open a form when it occurs. If it's always the same form, that's easy, but what if you want it to be determined during runtime? This is a quite common story: doubleclick on article opens the detail form of that article, doubleclick on supllier opens that particular form. If you use a form variable, how do you say to the class which form should be opened? This will not work
Dim FormToOpen as Form 'you don't want to open it right away, you want to know when the time comes what form to openFormToOpen = Form1You could say FormToOpen = new Form1, but then 1. an instance would be immediately created, even if it never will be used: memory leak. 2. you can never close the form, you'll always have to use the same instance created when setting the form. Consequently, you can never open more than 1 instance using this way.
The solution: use the type. If you know the type, the Activator class will enable you to open (and return) an instance of that form at any time and as much times as you like. (The Activotor class exposes the function CreateInstance which returns an instance of the specified object)The following code creates an instance of the type form1 and shows it.
CType(Activator.CreateInstance(GetType(Form1)), Form).Show()Or for better readability, the same code split up:
Dim FormToOpen As Type
FormToOpen = GetType(Form1)
Dim frm As Form = CType(Activator.CreateInstance(FormToOpen), Form)