I wish to call a form with the form name contained in a variable
using a declaration such as
public myform as form
will work if the formname is used.
but myform will not accept a variable containing the form name
have you tried using the NEW keyword.
say I set up a sub as follows
sub thisisasub(source as form) and my form is called myform which I have put into a variable called myvariable
if I call it thus
call thisisasub(myvariable) it does not work
if I call it like this
call thisisasub(myform) it does
I need to reference my form using the variable
Edited 5 Years Ago by Nick Evan: fixed CODE tags
Try using this.
public myform as Form myform = New Form1 call thisisasub(myform)
not sure what that will achieve
it seems to me that you still require explicit use of the formname
The only reference I have to the formname is
as the form is selected from a listbox
Unfortunately, VB is very good at hiding the API calls needed to create a class dynamically. In VB when you create a form it becomes a referenceable class, so you have to instantiate it explicitly.
As an alternative, you might consider using an array to hold instances of your forms, then test the value from the listbox in its click event, and show the appropriate form? Here's what I mean:
Dim myForms() As Form ' or, you can put this in a module as a global Private Sub Form_Load() ' just setting up... Me.List1.AddItem "Form2" ReDim myForms(0) Set myForms(0) = New Form2 Me.List1.AddItem "Form3" ReDim Preserve myForms(1) Set myForms(1) = New Form3 End Sub Private Sub List1_Click() ' just a sample...could be done better... Dim i As Integer For i = 0 To UBound(myForms) If myForms(i).Name = Me.List1.Text Then Call thisisasub(myForms(i)) Exit Sub End If Next i End Sub Private Sub thisisasub(parmForm As Form) Debug.Print parmForm.Name parmForm.Show End Sub
This assumes that you have already built Form2 and Form3 somewhere. Keep in mind too that in the array of forms, each form name is the CLASS NAME of the form, not the instance name...you'll have to do something else clever if you want to have multiple instances of each type of form (caption? tag?).
Anyway, hope this helps some.
EDIT: I had to do this in VB6...I don't think array and form handling changed between VB4 and 6, so I think this technique will still work.
Edited 5 Years Ago by BitBlt: n/a
all the code seems recognisable in VB4 so,
I will try this, if successful, I will post resolved
(and probably a great deal of thankyous)
however, I have never explicitly declared the integer of a for next loop..is the dim i as integer really necessary
most of the code works fine
not sure if there is a difference in VB6, but
if I make any reference like if mymodule.myforms(I).name=me.list1.text then
it returns a form already loaded message
in fact any reference to mymodule.myforms(I).name returns the same
If I turn off sort property of list and keep myforms in same sequence then
call thisisasub(mymodule.myforms(list1.listindex) works
I would like to be able to check the myforms array against the list so any thoughts would be useful
This problem is resolved as far as I need it to be.
some slight adaptions of your code were needed, but you certainly pointed me in the right direction.
Thanks a lot
Variables as Form Names in VB4
While, I appreciate that the thread is marked as solved, I believe that some information should be made available to stop others from falling into the same pit as I did. I marked the thread as solved because the solution offered pointed me in the right direction.
In the solution offered, the ‘New’ keyword was suggested. Unfortunately the ‘New ’ keyword loads a second copy of the form and the consequence is that any reference to it loads it twice. This can be proved by setting up the form with an image and create several more in an array at run time. When the solution is run, it throws up a message “object already loaded”. This is because they are created on the first loading of the form and are still there at the second loading..If you remove the ‘New ‘ keyword only one copy of the form is used and as a result this fault is avoided.
A comparison is made between the listbox list and the myforms collection because the listbox could be in a different order to the myforms collection...so me.list1.text is compared with myforms.name.
But every-time myforms.name is used, the form has to be loaded (though not visible) to allow the ‘Name’ property to be accessed.. If you have a large number of forms, therefore, this comparison process could be significant and the time taken noticeable. The solution is to create a new collection (not of type form) using the same filenames and keep it in the same order as the forms collection.
The comparison is therefore done using the listbox and the new collection, when a hit occurs the index is noted and then used to access the myforms collection.
I would love to hear from anyone with a more elegant solution.
Write a C program that should create a 10 element array of random integers (0 to 9). The program should total all of the numbers in the odd positions of the array and compare them with the total of the numbers in the even positions of the array and indicate ...
Hi. so this is actually a continuation from another question of mineHere but i was advised to start a new thread as the original question was already answered.
This is the result of previous question answered :
code for the listbox - datagridview interaction
At the top of the code ...
I have a 2d matrix with dimension (3, n) called A, I want to calculate the normalization and cross product of two arrays (b,z) (see the code please) for each column (for the first column, then the second one and so on).
the function that I created to find the ...