Francisco Tapia
fhtapia at gmail.com
Wed Dec 15 17:34:01 CST 2004
can't change the VB_Creatable setting in Access... the 2 choices given is Private and PublicNotCreatable... :( On Wed, 15 Dec 2004 15:02:42 -0800, Charlotte Foust <cfoust at infostatsystems.com> wrote: > You could try setting Attribute VB_Creatable = True. > > Charlotte Foust > > > -----Original Message----- > From: Francisco Tapia [mailto:fhtapia at gmail.com] > Sent: Wednesday, December 15, 2004 2:47 PM > To: Access Developers discussion and problem solving > Subject: Re: [AccessD] Multi-Instance Forms re-visited > > This code works for displaying "one" form... but it does not give me a > tolorance to opening a 2nd Form... :(, the original code worked fine for > many forms... Ideas? > > it could be the way that I'm calling it, (such as > > Dim MultiForms As clsMultiInstance > > If MultiForms Is Nothing Then > Set MultiForms = New clsMultiInstance > End If > MultiForms.Add frm, frm.hWnd, OpenArgs > > ------------------------------ > VERSION 1.0 CLASS > BEGIN > MultiUse = -1 'True > END > Attribute VB_Name = "clsMultiInstance" > Attribute VB_GlobalNameSpace = False > Attribute VB_Creatable = False > Attribute VB_PredeclaredId = False > Attribute VB_Exposed = False > Option Compare Database > 'Multi Instance Multiple Forms > > Dim mForms As Collection > Private colForm As Access.Form > Private colhWnd As String > Private colOpenArgs As String > Public Property Let Form(frm As Access.Form) > Set colForm = frm > End Property > Public Property Get Form() As Access.Form > Set Form = colForm > End Property > Public Property Let hWnd(hWnd As String) > colhWnd = hWnd > End Property > Public Property Get strhWnd() As String > hWnd = colhWnd > End Property > Public Property Let OpenArgs(Args As String) > colOpenArgs = Args > End Property > Public Property Get OpenArgs() As String > OpenArgs = colOpenArgs > End Property > > Sub Add(frm As Access.Form, hWnd As String, OpenArgs As String, Optional > Key As Variant) Dim x As clsMultiInstance > Set x = New clsMultiInstance > x.Form = frm > x.hWnd = hWnd > x.OpenArgs = OpenArgs > x.Form.Visible = True > > 'On a 2nd call it errors out from here... > ----> mForms.Add Item:=x, Key:=CStr(hWnd) > > End Sub > Sub Remove(hWnd As String) > 'Purpose: Remove this instance from the collection. > Dim obj As Object 'Object in Collection > Dim blnRemove As Boolean 'Flag to remove it. > > 'Check if this instance is in the collection. > ' (It won't be if form was opened directly, or code was reset.) > For Each obj In mForms > If obj.hWnd = hWnd Then > blnRemove = True > Exit For > End If > Next > 'Deassign the object before removing from collection. > Set obj = Nothing > If blnRemove Then > mForms.Remove CStr(hWnd) > End If > End Sub > Function Count() As Integer > mForms.Count > End Function > Function Item(index As Variant) As clsMultiInstance > Set Item = mForms.Item(index) > End Function > Public Function Term() > 'Purpose: Close all instances in the collection. > 'Note: Leaves the copy opened directly from database window. > Dim lngKt As Long > Dim lngI As Long > > lngKt = mForms.Count > For lngI = 1 To lngKt > mForms.Remove 1 > Next > Set mForms = Nothing > End Function > > Private Sub Class_Initialize() > Set mForms = New Collection > End Sub > > ---------------END CLASS---------- > > On Wed, 15 Dec 2004 16:09:15 -0500, Jim DeMarco > <Jdemarco at hudsonhealthplan.org> wrote: > > Makes sense. I was typing from (lack of) memory!! > > > > Hope it works out. > > > > Jim > > > > -----Original Message----- > > From: accessd-bounces at databaseadvisors.com > > [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Francisco > > Tapia > > Sent: Wednesday, December 15, 2004 4:03 PM > > To: Access Developers discussion and problem solving > > Subject: Re: [AccessD] Multi-Instance Forms re-visited > > > > Jim that sounds great (re: more code :D), > > > > I was wondering on this line: > > > > m_col.add(x,hWnd) > > > > access complains about an '=' > > so I re-wrote it as m_col.add x, hWnd > > > > On Wed, 15 Dec 2004 15:40:05 -0500, Jim DeMarco > > <Jdemarco at hudsonhealthplan.org> wrote: > > > Francisco, > > > > > > What about writing the value you want to use as openargs to an xml > > > file and reading it in after the form is open? > > > > > > Or instead of a standard collection use a custom collection class > > > that is similar to the one you have here but it would hold the form > > > refernce, the form's hwind, and the openarg value. > > > > > > First a class to hold the data you're trying to use: > > > > > > 'MyClass > > > <classStub> > > > Public Property Let Form(frm as Access.Form)... > > > Public Property Let hWnd(hWnd as String)... > > > Public Property Let OpenArgs(Args As String)... </classStub> > > > > > > <collectionclassmodule> > > > dim m_col as Collection > > > > > > 'MyCollectionClass > > > Sub Add(frm As Access.Form, hWnd as String, OpenArgs as String, > > > Optional Key As Variant) dim x as MyClass Sex x = new MyClass > > > x.Form = frm > > > x.hWnd = hWnd > > > x.OpenArgs = OpenArgs > > > m_col.add(x,hWnd) > > > End Sub > > > > > > Function Item(index As Variant) As MyClass > > > Set Item = m_col.Item(index) > > > End Function > > > </collectionclassmodule> > > > > > > Now you've got access in your collection to all the info you need > > > for your form. To store the values <snip> > > > Dim MyCol as MyCollectionClass > > > > > > MyCol.Add(frm, frm.Hwnd, "value1;value2)) > > > </snip> > > > > > > To retrieve them: > > > <snip> > > > Dim MyStringArg As String > > > MyStringArg = MyCol.Item(frm.hwnd).OpenArgs > > > 'do something with MyStringArg > > > > > > </snip> > > > > > > It's really not as complicated as it might look. If you need more > > > info or my complete custom collection class stub (VB) let me know. > > > > > > HTH, > > > > > > Jim DeMarco > > > > > > -----Original Message----- > > > From: accessd-bounces at databaseadvisors.com > > > [mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Francisco > > > Tapia > > > Sent: Wednesday, December 15, 2004 1:40 PM > > > To: Access Developers discussion and problem solving > > > Subject: [AccessD] Multi-Instance Forms re-visited > > > > > > So I have the following code in a public module.. > > > > > > the purpose is to have more than one instance of the form where end > > > users can start "multiple calls" and then keep starting newer calls. > > > > > > the following code works really well and in fact I can do what I > > > need with it, except passing openargs... I figure I can use a > > > workaround unless someone here knows of a better way? > > > > > > thanks, > > > > > > ---CODE SNIP------------ > > > Option Compare Database > > > Option Explicit > > > 'Author: Allen J Browne, January 2000 > > > 'Email: abrowne at odyssey.apana.org.au > > > > > > Public clnClient As New Collection 'Instances of frmClient. > > > > > > Function OpenAClient() > > > 'Purpose: Open an independent instance of form frmClient. > > > Dim frm As Form > > > > > > 'Open a new instance, show it, and set a caption. > > > Set frm = New Form_frmClient > > > frm.Visible = True > > > frm.Caption = frm.Hwnd & ", opened " & Now() > > > > > > 'Append it to our collection. > > > clnClient.Add Item:=frm, Key:=CStr(frm.Hwnd) > > > Set frm = Nothing > > > End Function > > > > > > Function CloseAllClients() > > > 'Purpose: Close all instances in the clnClient collection. > > > 'Note: Leaves the copy opened directly from database window. > > > Dim lngKt As Long > > > Dim lngI As Long > > > > > > lngKt = clnClient.Count > > > For lngI = 1 To lngKt > > > clnClient.Remove 1 > > > Next > > > End Function > > > ---END CODE SNIP----------------- > > -- > -- > -Francisco > http://pcthis.blogspot.com | PC news with out the jargon! > -- > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > -- > AccessD mailing list > AccessD at databaseadvisors.com > http://databaseadvisors.com/mailman/listinfo/accessd > Website: http://www.databaseadvisors.com > -- -Francisco http://pcthis.blogspot.com | PC news with out the jargon!