Наследование форм в реализациях Visual Studios - PullRequest
3 голосов
/ 30 апреля 2010

Я в процессе перемещения проекта из Visual Studio 2003 в 2005 и только что увидел

Событие Click доступно только для чтения и не может быть изменено

при использовании унаследованных форм независимо от модификатора в элементах управления базовых форм все элементы управления из базы будут считываться в конструкторе только для чтения (хотя в 2003 году это не сработало).

Я обнаружил это сообщение, отметив, что эта функция временно "отключена" http://social.msdn.microsoft.com/Forums/en-US/winformsdesigner/thread/c25cec28-67a5-4e30-bb2d-9f8dbd41eb3a

Может ли кто-нибудь подтвердить, используется ли эта функция больше? или как программировать вокруг него, чтобы иметь возможность использовать базовые события управления и при этом иметь конструктор?

Это один из способов, который я нашел, но довольно болезненный, когда он делал сантехнику для тебя. даже просто скрывая один из элементов управления, которые вы сейчас делаете вручную.

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

1 Ответ

3 голосов
/ 30 апреля 2010

Базовые классы, которые генерируют события, требуют стандартного шаблона генерации событий. Это должно быть сделано в коде, дизайнер не может автоматически сгенерировать его. Это никогда не будет.

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
...