vbLuis Posted September 26, 2003 Posted September 26, 2003 I can't figure out how to detect when an active MDI Child Form has been deactivated. The Deactivate event works on non-MDI forms but doesn't fire on MDI Child Forms. There is no corresponding Deactivate event to the MdiChildActivate event. MdiChildActivate works fine. I probably could do a workaround on that, but I'd rather figure out what event gets called. I tried Leave and OnLostFocus, but they often fire even as the same Child Form remains active. What event should I use? Quote
AlexCode Posted September 26, 2003 Posted September 26, 2003 I don't know what kind of problem you have... It works just fine for me! I use it a lot on one of my current projects! Do you wnat to pass the event to the MDI to control something? If so you have to Raise an Event that will be catchedby the MDI Parent... I'll post here the code that works for me... The idea is to pass an Event to the MDI whenever a MDIChild is Activated or Deactivated, Showing o Hiding the correnpondent Toolbox on my DevExpress ToolBar Control that is placed on the MDI Parent. Private Sub frmFichasReclusos_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated RaiseEvent ReclusosBarVisible(True) End Sub Private Sub frmFichasReclusos_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Deactivate RaiseEvent ReclusosBarVisible(False) End Sub Tell me if you have any doubts or if it isn't what u wanted ... Quote Software bugs are impossible to detect by anybody except the end user.
*Gurus* divil Posted September 26, 2003 *Gurus* Posted September 26, 2003 You can use the parent's MdiChildActivate event for both purposes. When it fires and there is only one child window open, you've just opened your first child. When it fires after that it means that one has just been deactivated in favour of the new one, obviously. You can keep a reference to the currently active window if you need to determine which one was deactivated. The event will fire once more when the last child window is closed, and then the parent ActiveMdiChild property will be null. Quote MVP, Visual Developer - .NET Now you see why evil will always triumph - because good is dumb. My free .NET Windows Forms Controls and Articles
vbLuis Posted September 26, 2003 Author Posted September 26, 2003 Thanks, Divil. That's the approach I decided to use. Here's the code I came up with: 'MDI parent-level declare Private mPrevChildForm As Form Private Sub MdiChildActivateDeactivate(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.MdiChildActivate ' Determine the active child form. Dim activeChild As Form = Me.ActiveMdiChild If Not activeChild Is Nothing Then 'Only deal with Business forms 'All my MDI Child forms are inherited from BusinessForm If TypeOf activeChild Is BusinessForm Then 'The first time in, mPrevChildForm should be Nothing If Not mPrevChildForm Is Nothing Then 'Run my version of Deactivate DirectCast(mPrevChildForm, BusinessForm).bizDeactivate() End If 'Save current active form and run my version of Activate mPrevChildForm = activeChild DirectCast(mPrevChildForm, BusinessForm).bizActivate() End If End If End Sub Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.