【问题标题】:Form Inheritance in Visual Studios designer implementationsVisual Studios 设计器实现中的表单继承
【发布时间】:2010-04-30 06:50:36
【问题描述】:

我正在将一个项目从 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

【问题讨论】:

    标签: vb.net forms inheritance visual-studio-2005 visual-studio-2003


    【解决方案1】:

    生成事件的基类需要标准的事件生成模式。这必须在代码中完成,设计者无法自动生成它。它永远不会。

    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
    

    【讨论】:

    • 哦,错了..这可能就是他们把它拿出来的原因..在VS 2003中,您可以直接链接到基类中的控件(这就是我要问的原因)并直接运行事件在子窗体中,设计器确实自动生成了代码。这种方式使其与 .net 的设计结构保持一致确实更有意义。谢谢
    猜你喜欢
    • 2021-10-21
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多