2011-06-09 20 views
1

我通过以下方式学习vb中的组件 http://msdn.microsoft.com/en-us/library/151w6x12(v=VS.100).aspx生成代码与开发人员书写代码中的新增功能有什么区别?

一切与教程完全一样,直到为构造函数添加代码。 CDemo.vb中我的附加组件中没有Sub New。我发现Sub NewCDemo.Designer.vb(我认为这是由系统生成的)。

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

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

End Sub 

如果我在CDemo.vb添加亚新如下,它的主要错误BC30269:“公用Sub新()”有多个具有相同签名的定义。

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,而不是添加在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,我应该在哪里添加我自己的代码?对于初学者来说,我很难区分系统生成的代码和我的代码。

回答

3

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

将Component添加到项目时,IDE会自动生成Designer.vb文件中的代码。 从来没有在Designer文件中编辑代码的一般规则,因为它通常由设计人员维护。除非你必须和这是一个这样的情况。将Designer文件中的构造函数剪切并粘贴到CDemo.vb源代码文件中。当心有两个,别忘了把它们都移动。移动它们而不是重新输入构造函数会照顾第一个问题。

要小心你写的构造函数是错误的。您必须添加的行,而不是替换那些已经存在的行。 InitializeComponent()调用后的最佳位置。

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

+0

没有捕获到关于“运行”组件的信息。汉斯对此完全正确。 – DarinH 2011-06-09 20:23:04

+0

你说得对。我的Visual Studio版本是2010.组件无法直接运行。非常感谢! – Summer 2011-06-09 20:50:35

0

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

它是在一个部分类,这就是为什么你没有看到它的典型。

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

它应该看起来像你的代码。

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

    End Sub 
+0

我加了公共,但同样的错误。实际上,当我点击错误时,它指向CDemo.Designer.vb中的Public Sub New。所以在我看来,由于CDemo.Designer.vb中的New的定义,我无法定义我自己的构造函数 – Summer 2011-06-09 19:49:49

0

啊..你用的是VS2003吗?它将事情分开一点。你可以尝试Public Overrides sub New()

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

截至2008年和2010年,至少对于用户控件而言,您可以+直接在您的代码部分类中输入一个公共子新,并且它不会与“designer.vb”文件发生冲突。

+0

它与设计器文件没有冲突,因为当你输入“Public Sub New()”并按回车键时,它会将所有设计器代码移动到常规vb中。这是在vs2005中添加的。他可以手动将New Method从设计器文件移动到VS2003中的代码中,而不会出现任何问题。他必须离开对InitializeComponent()的调用才能使所有内容都工作,并在该行之后添加他的代码。 – 2011-06-09 23:19:25

0
  • 只需更改功能新()由NEW1()和评论对“MyBase.New
  • 变化也起到OnCreateMainForm()由OnCreateMainForm1()

,它会一直努力!

查看文件夹... \ YourApllicationFolder \我的项目进入该文件

相关问题