By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,619 Members | 1,712 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,619 IT Pros & Developers. It's quick & easy.

Access MDI child properties generically

P: n/a
Hello,

I have an MDI app. There are many child forms and they all have several
things in common. They all have a Save button, a public variable
boolNavigate, and they all have a TreeView called treeBrowse.

I have a generic routine to create the TreeView and add it to a form since I
do this on a dozen or so forms. I also would like to add event handlers in
this generic routine. The handler routines perform the same function on
every form, but they need to reference the boolNavigate variable of the
particular calling form. How can I do this without typing the form in a
case with every possible child form?

Here is my code from a librabry module...

Public Sub CreateBrowserTree(ByVal frmParent As Form, ByVal treeIn As
TreeView)
'sets up a generic browser tree view attached to the passed in
parent control
Dim splitBrowse As Splitter

'create a splitter
splitBrowse = New Splitter
With splitBrowse
'...set properties
End With
frmParent.Controls.Add(splitBrowse)

'create a tree
treeIn = New TreeView
With treeIn
'...set properties
End With
frmParent.Controls.Add(treeIn)

'attach event handlers
AddHandler treeIn.BeforeSelect, AddressOf TreeBrowse_BeforeSelect
'.... more of same type handlers
End Sub

Private Sub TreeBrowse_BeforeSelect(ByVal sender As Object, ByVal e As
System.Windows.Forms.TreeViewCancelEventArgs)
'dont allow user to leave this node if bollNavigate is false
If (not sender.boolNavigate) Then
Beep()
e.Cancel = True
End If
End Sub

The part about 'sender.boolNavigate' does not work. How can I access this
property that I know exists for every given form?

Also, I the code for each form's 'Save' button is the same. Is there a way
I can make a generic handler for that and have it apply to all the forms so
I can maintain 1 routine? Currently every form's save routine looks about
like this...

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdSave.Click
If (SaveFormData(boolAddingNew, me) Then 'SaveFormData is a
generic data saving routine, pass a flag for new and the parent control
(form)
'reload the data
LoadFormData() 'this routine is different on each
form, but the Save handler would call each form's version
FirstNode(treeBrowse)
cmdNew.Enabled = True 'again, each form has a cmdNew
End If
End Sub

Thanks in advance.
May 14 '06 #1
Share this Question
Share on Google+
1 Reply


P: n/a
CMM
I'm not really sure if I completely understand the problem... but from what
I could surmise, wouldn't having your child forms implement an Interface
solve your problems?

First off, for the love of god, wrap the boolNavigate var into a Property
called "AllowNavigate" or something. Add a new Interface file:

Interface IMyChildForm
Property AllowNavigate As Boolean
End Interface

Then add "Implements IMyChildForm" to all your forms.

Then you use as so:

If Not DirectCast(Sender, IMyChildForm).AllowNavigate Then
Beep()
e.Cancel = True
End If
--
-C. Moya
www.cmoya.com

"Mark Hoffy" <ma**@here.com> wrote in message
news:81****************@fe04.lga...
Hello,

I have an MDI app. There are many child forms and they all have several
things in common. They all have a Save button, a public variable
boolNavigate, and they all have a TreeView called treeBrowse.

I have a generic routine to create the TreeView and add it to a form since
I
do this on a dozen or so forms. I also would like to add event handlers
in
this generic routine. The handler routines perform the same function on
every form, but they need to reference the boolNavigate variable of the
particular calling form. How can I do this without typing the form in a
case with every possible child form?

Here is my code from a librabry module...

Public Sub CreateBrowserTree(ByVal frmParent As Form, ByVal treeIn As
TreeView)
'sets up a generic browser tree view attached to the passed in
parent control
Dim splitBrowse As Splitter

'create a splitter
splitBrowse = New Splitter
With splitBrowse
'...set properties
End With
frmParent.Controls.Add(splitBrowse)

'create a tree
treeIn = New TreeView
With treeIn
'...set properties
End With
frmParent.Controls.Add(treeIn)

'attach event handlers
AddHandler treeIn.BeforeSelect, AddressOf TreeBrowse_BeforeSelect
'.... more of same type handlers
End Sub

Private Sub TreeBrowse_BeforeSelect(ByVal sender As Object, ByVal e As
System.Windows.Forms.TreeViewCancelEventArgs)
'dont allow user to leave this node if bollNavigate is false
If (not sender.boolNavigate) Then
Beep()
e.Cancel = True
End If
End Sub

The part about 'sender.boolNavigate' does not work. How can I access this
property that I know exists for every given form?

Also, I the code for each form's 'Save' button is the same. Is there a
way
I can make a generic handler for that and have it apply to all the forms
so
I can maintain 1 routine? Currently every form's save routine looks about
like this...

Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles cmdSave.Click
If (SaveFormData(boolAddingNew, me) Then 'SaveFormData is a
generic data saving routine, pass a flag for new and the parent control
(form)
'reload the data
LoadFormData() 'this routine is different on each
form, but the Save handler would call each form's version
FirstNode(treeBrowse)
cmdNew.Enabled = True 'again, each form has a cmdNew
End If
End Sub

Thanks in advance.

May 16 '06 #2

This discussion thread is closed

Replies have been disabled for this discussion.