生成代码与开发人员编写代码中的新功能有什么区别?

时间:2011-06-09 19:31:06

标签: vb.net new-operator

我正在通过以下方式学习vb中的组件 http://msdn.microsoft.com/en-us/library/151w6x12(v=VS.100).aspx

在为构造函数添加代码之前,所有内容都与教程完全相同。我Sub New中添加的组件中没有CDemo.vb。我在Sub New中找到CDemo.Designer.vb(我认为是由系统生成的)。

<System.Diagnostics.DebuggerNonUserCode()> _
Public Sub New()
    MyBase.New()

    'This call is required by the Component Designer.
    InitializeComponent()

End Sub

如果我在CDemo.vb中添加sub New,如下所示,它有错误BC30269:'Public Sub New()'有多个具有相同签名的定义。

Public Class CDemo

    Public ReadOnly InstanceID As Integer
    Private Shared NextInstanceID As Integer = 0
    Private Shared ClassInstanceCount As Long = 0

  Sub New()
    InstanceID = NextInstanceID
    NextInstanceID += 1
    ClassInstanceCount += 1

  End Sub

End Class

但如果我不在CDemo.vb中添加sub New,而是在CDemo.Designer.vb中添加代码,则表示项目无法直接启动。

<System.Diagnostics.DebuggerNonUserCode()> _
Public Sub New()
    MyBase.New()
    InstanceID = NextInstanceID
    NextInstanceID += 1
    ClassInstanceCount += 1
    'This call is required by the Component Designer.
    InitializeComponent()

End Sub

我不明白什么是CDemo.Designer.vb,我应该在哪里添加自己的代码?对于初学者,我发现很难区分系统生成的代码和我的代码。

4 个答案:

答案 0 :(得分:3)

请注意您链接的页面已过时,请选择与您的Visual Studio版本匹配的页面。你在这里处理两个问题。一次一个:

将Component添加到项目中时,IDE会自动在Designer.vb文件中生成代码。 从不编辑Designer文件中的代码是一般规则,因为它通常由设计者维护。除非你必须这样,这是一个这样的情况。将Designer文件中的构造函数剪切并粘贴到CDemo.vb源代码文件中。请注意,有两个,不要忘记将它们都移动。移动它们而不是重新键入构造函数可以解决第一个问题。

请注意,您错误地编写了构造函数。您必须添加行,而不是替换已存在的行。最好的地方是在InitializeComponent()调用之后。

第二个问题是“项目无法直接启动”错误消息。您无法运行组件,您必须创建使用该组件的程序。您在“测试组件”部分中链接的MSDN文章中对此进行了很好的描述。

答案 1 :(得分:0)

所以你假设设计师正在生成CDemo.Designer.vb代码是正确的。在此注释中,您通常不希望对此代码进行更改,因为Visual Studio可能会意外地更改此代码。放在那里的原因是你不必担心它,你也不应该这样做。

这是一个部分课程,这就是你通常不会看到它的原因。

关于你应该把Public Sub New放在哪里的问题是它应该在CDemo.vb文件中。我认为你得到多个定义错误的原因是你没有宣称它是公开的。

在您的代码中应该如下所示。

Public Sub New()
    InstanceID = NextInstanceID
    NextInstanceID += 1
    ClassInstanceCount += 1

  End Sub

答案 2 :(得分:0)

啊......你在使用VS2003吗?它把事情分解得有些不同。您可以尝试使用Public Overrides sub New()

或者只是不要把代码放在sub new中,把它放在LOAD事件中(通常这很好,尽管在sub new中你可能需要做一些事情)。

截至2008年和2010年,至少对于用户控件,你+可以+直接在你的代码分部类中输入一个public sub,它不会与“designer.vb”文件冲突。

答案 3 :(得分:0)

  • 只需通过New1()更改函数New()并注释&#39; MyBase.New
  • 通过OnCreateMainForm1()更改函数OnCreateMainForm()

它会一直有效!

请参阅文件夹... \ YourApllicationFolder \ My Project进入文件