[AccessD] Multi-Instance Forms re-visited

Francisco Tapia fhtapia at gmail.com
Wed Dec 15 17:58:20 CST 2004


I tried this but it reverted it back to Private...


On Wed, 15 Dec 2004 15:47:02 -0800, Charlotte Foust
<cfoust at infostatsystems.com> wrote:
> As far as I know, you've never been able to change it in Access.  Export
> the module to text, edit the text and then bring the file back in.
> 
> Charlotte Foust
> 
> -----Original Message-----
> From: Francisco Tapia [mailto:fhtapia at gmail.com]
> Sent: Wednesday, December 15, 2004 3:34 PM
> To: Access Developers discussion and problem solving
> Subject: Re: [AccessD] Multi-Instance Forms re-visited
> 
> 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!
> --
> 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!



More information about the AccessD mailing list