Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Hi,

 

In VB 6 you have the standard forms collection. In VB.NET this collection doesn't exists anymore. So I�m trying to build my own forms collection. I created a base class where all my other forms are based on. In this base class I add the form to a collection when it loads.

This works fine. I have some code in the collection class to add items to the collection and a property Item. This code is similar as in VB6 when you use the class builder (does the class builder exists in VB.NET) But the return type of the property item can not be set to the client class (= the classes the collection class contains). When I set the return type of my class equal to the client class a syntax error appears = "option strict on disallows implicit conversions from System.Object to the client class"

 

Do any of you have an idea on how to solve this issue?

If more information is required, just ask...

 

Thanks in advance

Posted

If you want an old Form Collection:

Class FormCollection
     Public Shared Forms As Collection = New Collection()
End Class

In every forms Sub New put:

FormCollection.Forms.Add(Me)

Then put the remove code in the Closing Event

.Net allows software to be written for any version of Windows and not break like Unmanaged applications unless using Unmanaged procedures like APIs. If your program uses large amounts of memory but releases it when something else needs it, then what's the problem?
Posted

Not a regular collection

 

Ok this is indeed a possible way.

 

But I had a more advance collection in mind.

In VB6 it is possible to have the collection return a class.

 

For example

I have 2 classes "Customers" and "Customer"

The class "Customers" contains a collection of "Customer"

 

'The class "Customers"

 

Private mCol As Collection

 

Public Function Add(ByVal iID As Integer) As Customer

'create a new object

Dim oNewMember As Customer

 

'Check if ID doesn't alread exists if so exit

 

Set oNewMember = New Customer

 

oNewMember.ID= iID

 

 

'Add to collection

mCol.Add oNewMember

 

'return the object created

Set Add = oNewMember

Set oNewMember = Nothing

 

End Function

 

Public Property Get Item(vntIndexKey As Variant) As Customer

 

Set Item = mCol(vntIndexKey)

 

End Property

 

Public Property Get Count() As Long

 

Count = mCol.Count

 

End Property

 

Public Sub Remove(vntIndexKey As Variant)

Dim intItemCount As Integer

 

For intItemCount = vntIndexKey + 1 To mCol.Count

mCol(intItemCount).Index = mCol(intItemCount).Index - 1

Next

mCol.Remove vntIndexKey

 

End Sub

 

Private Property Get NewEnum() As IUnknown

 

Set NewEnum = mCol.[_NewEnum]

 

End Property

 

Private Sub Class_Initialize()

 

Set mCol = New Collection

 

End Sub

 

Private Sub Class_Terminate()

 

Set mCol = Nothing

 

End Sub

 

This would be the code in de class "Customer"

 

Private mvarID as Integer

 

Public property Let ID (ByVal ID as Integer)

mvarID = ID

end property

 

Public property Get ID () as Integer

ID = mvarID

end property

 

Other properties and functions can be added.

When you use the class "Customers" now you can do like this

Customers.Item(1).[Receive all the properties and subs of the class "Customer" Because the return value of the default Item is the class "Customer"

 

I have search to do the same in .NET but couldn't find it.

I already implemented the System.Collections.IEnumerable

But when I set the return type of my default value Item of the collection to "Customer" he gives the msg error. (the one in my first post)

 

Hope you better understand my problem now.

 

Thanks in advance

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...