Vb.net 新生成的代码与开发人员编写的代码相比,什么';有什么区别?

Vb.net 新生成的代码与开发人员编写的代码相比,什么';有什么区别?,vb.net,new-operator,Vb.net,New Operator,我正在学习vb中的组件,方法如下 在为构造函数添加代码之前,所有内容都与教程完全相同。在我在CDemo.vb中添加的组件中没有子新组件。我在CDemo.Designer.vb中找到了Sub-New(我认为这是由系统生成的) 但若我不在CDemo.vb中添加sub-New,而是在CDemo.Designer.vb中添加代码,那个么项目就不能直接启动了 <System.Diagnostics.DebuggerNonUserCode()> _ Public Sub New() M

我正在学习vb中的组件,方法如下

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

但若我不在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
_
公共分新()
MyBase.New()
InstanceID=NextInstanceID
NextInstanceID+=1
ClassInstanceCount+=1
'组件设计器需要此调用。
初始化组件()
端接头

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

因此,您认为
CDemo.Designer.vb
代码是由设计器生成的假设是正确的。注意,您通常不希望对此代码进行更改,因为VisualStudio生成的代码可能会意外地对其进行更改。它被放在那里的原因是,你不必担心它,你也不应该担心它

它位于分部类中,这就是为什么您通常看不到它的原因

关于你应该把你的
Public Sub-New
放在哪里的问题是它应该放在
CDemo.vb
文件中。我认为,您得到多个定义的错误的原因是您没有将其声明为public

在代码中应该是这样的

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

  End Sub

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

当您将组件添加到项目中时,IDE会自动在Designer.vb文件中生成代码。由于设计器文件通常由设计器维护,因此有一条一般规则禁止在设计器文件中编辑代码。除非你必须这么做,这就是一个这样的例子。将设计器文件中的构造函数剪切并粘贴到CDemo.vb源代码文件中。当心有两个,别忘了同时移动它们。移动它们而不是重新键入构造函数可以解决第一个问题

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


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

啊。。您正在使用VS2003?它把事情划分得有点不同。您可以尝试使用Public Overrides sub New()

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

从2008年到2010年,至少对于usercontrols,您可以+直接在代码分部类中输入一个新的公共子类,它不会与“designer.vb”文件冲突。

  • 只需将函数New()更改为New1()并注释“MyBase.New”
  • 还通过OnCreateMainForm1()更改函数OnCreateMainForm()
它将永远有效


请参阅文件夹…\yourapplicationfolder\My Project以进入文件

我添加了Public,但出现了相同的错误。实际上,当我单击错误时,它指向CDemo.Designer.vb中的Public Sub New。因此,在我看来,由于CDemo.Designer.vb中对New的定义,我无法定义自己的构造函数,也无法理解“运行”组件的含义。汉斯在这一点上完全正确。你是对的。我的Visual Studio版本是2010。组件无法直接运行。谢谢!它与设计器文件不冲突,因为当您键入“Public Sub New()”并单击enter键时,它会将所有设计器代码移到常规vb中。这是在vs2005中添加的。他可以在VS2003中将新方法从设计器文件手动移动到他的代码中,而不会出现任何问题。他必须保留对InitializeComponent()的调用,以便一切正常工作,并在该行之后添加代码。
<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
Public Sub New()
    InstanceID = NextInstanceID
    NextInstanceID += 1
    ClassInstanceCount += 1

  End Sub