vb.netformsinheritancevisual-studio-2005visual-studio-2003

Form Inheritance in Visual Studios designer implementations


I'm in the process of moving a project from Visual Studio 2003 to 2005 and have just seen the

The event Click is read-only and cannot be changed

when using inherited forms regardless of the Modifier on the Base Forms Controls will make all the Controls from the Base Readonly in the designer (Though in 2003 it didn't work this way).

I found this post mentioning that this functionality has been temporarily" disabled http://social.msdn.microsoft.com/Forums/en-US/winformsdesigner/thread/c25cec28-67a5-4e30-bb2d-9f8dbd41eb3a

Can anyone confirm whether this feature is used anymore? Or how to program around it to be able to use the Base Control Events and still have a designer?

This is one way I've found but quite painful when it used to do the plumbing for you. Even just hiding one of the controls you have manually do now.

Public Class BFormChild

    Friend Overrides Sub cmdApply_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        MyBase.cmdApply_Click(sender, e)
    End Sub
    Friend Overrides Sub cmdCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        MyBase.cmdCancel_Click(sender, e)
    End Sub
    Friend Overrides Sub cmdOk_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        MyBase.cmdOk_Click(sender, e)
    End Sub

End Class

Solution

  • Base classes that generate events require the standard event generation pattern. That must be done in code, the designer cannot auto-generate it. It never will.

    Public Class BFormBase
      Public Event ApplyClicked As EventHandler
    
      Protected Overridable Sub OnApplyClicked(ByVal e As EventArgs)
        '--- Possible default implementation here
        '...
        RaiseEvent ApplyClicked(Me, e)
      End Sub
    
      Private Sub cmdApply_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdApply.Click
        OnApplyClicked(e)
      End Sub