我正在通过以下方式学习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,我应该在哪里添加自己的代码?对于初学者,我发现很难区分系统生成的代码和我的代码。
答案 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)
它会一直有效!
请参阅文件夹... \ YourApllicationFolder \ My Project进入文件