首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

[] FTP上载代码的有关问题,被卡住了 5555555555

2013-02-25 
[求助] FTP下载代码的问题,被卡住了 5555555555我下载了一个FTP下载上传功能的代码把里面的文件添加到我自

[求助] FTP下载代码的问题,被卡住了 5555555555
我下载了一个FTP下载上传功能的代码把里面的文件添加到我自己的工程文件内可是就是报这个错“无效使用New关键字”
部分代码如下

Private WithEvents wscControl As MSWinsockLib.Winsock
Private WithEvents wscData As MSWinsockLib.Winsock

Private Sub Class_Initialize()
    Set wscControl = New MSWinsockLib.Winsock  ’‘’ 无效使用New关键字
    Set wscData = New MSWinsockLib.Winsock
    Set m_objTimeOut = New CTimeout
End Sub

百度了很长时间都没找到答案,可是人家的代码就能够正常运行
请各位高人指点不胜感谢。
[解决办法]
应该是没有添加WinSock。
[解决办法]
Winsock 是控件不是单纯的类
========================================================

Add 方法(Controls 集合)
      

在 Controls 集合中添加一个控件并返回一个对该控件的引用。

语法

object.Add (ProgID, name, container)

Add 方法语法有这些部分:

部分 描述 
Object 必需的。一个对象表达式,其值是“应用于”列表中的一个对象。 
ProgID 必需的。一个标识控件的字符串。大多数控件的 ProgID 都可通过查看对象浏览器来决定。控件的 ProgID 是由控件的库和类组成的。例如,CommandButton 控件的 ProgID 是 VB.CommandButton。在 ProgID 与对象浏览器中所显示的不一样的情况下,Visual Basic 将显示一个包括正确 ProgId 的错误信息。 
name 必要的。一个字符串,用来标识集合的成员。 
container 可选的。一个对象引用,它指定控件的容器。如果没有指定或为 NULL,缺省值为 Controls 集合所属的容器。通过指定该参数,可以把一个控件放置在任何现存的容器控件(如 Frame 控件)中。用户控件或 ActiveX 文档也可以作为一个容器。 


说明

注意    Controls 集合是后期绑定的集合。这意味着编译器不能预先决定集合以及它们的对象或它们的界面包含哪些控件。没有这些信息,自动语句生成器不能工作。

该方法允许您在运行时向应用程序中添加控件。即使在应用程序已经被编译与部署之后,动态控件添加也可以用来向应用程序添加一个控件的功能。例如,您可能有几个复杂的用户控件,每个适合于一个不同的任务。由于外部因素不同,如时间或日期或用户输入,不同的用户控件可以被添加到一个应用程序中的某个现存窗体。您也可以利用这个方法的 container 参数来指定一个容器控件(如 Frame 控件)来放置这个控件。或您可以设计一个自动读取文件、数据库或注册表项来加载新控件的应用程序。用这种方法,您可以修改一个应用程序而不必重新部署它。

重点 当您添加一个未引用的需要许可证的控件到一个现存的(已部署好的)应用程序时,在使用 Add 方法之前您必须也添加这个控件的许可证关键字。关于什么时候和如何添加许可证有关信息,请参阅“请参阅”列表中的“Licenses 集合”。

在运行时添加未引用的控件
您也可以利用 Add 方法来动态添加一个在工程中没有被引用的控件。(“未引用的”控件是不出现在 Toolbox 中的控件)。为此,您必须也把控件的 License 关键字添加到 Licenses 集合中。下面的示例中在添加控件本身之前添加了控件的许可证关键字:

Option Explicit
Private WithEvents extCtl As VBControlExtender

Private Sub Form_Load()
   Licenses.Add "prjWeeks.WeeksCtl", "xydsfasfjewfe"
   Set extCtl = Form1.Controls.Add("prjWeeks.WeeksCtl", "ctl1")
   extCtl.Visible = True ' The control is invisible by default.
End Sub

注意   请参阅关于检索控件许可证关键字的详细信息的“请参阅”列表中的“增加方法 (Licenses 集合) ”。

但是,为了编程这样一个未引用控件的事件,您必须使用 WithEvents 关键字声明一个对象变量为VBControlExtender 对象(如上),并且设置该对象变量到 Add 方法返回的引用上。然后,利用VBControlExtender 对象的 ObjectEvent 事件来编程该控件的事件。下面是一个简单的例子。

Option Explicit
Dim WithEvents objExt As VBControlExtender '声明 Extender 变量

Private Sub LoadControl()
   Licenses.Add "Project1.Control1", "xydsfasfjewfe"
   Set objExt = Controls.Add("Project1.Control1", "myCtl")
   objExt.Visible = True 
End Sub

Private Sub extObj_ObjectEvent(Info As EventInfo)
   '使用 Select Case 编程控件的事件。
   Select Case Info.Name


   Case "Click"
      '这里处理 Click 事件。
   '现在显示其他的 case
   Case Else '未知事件
      '这里处理未知事件。
   End Select
End Sub

Note   不能把一个固有的控件指定给这个 VBControlExtender 变量; 任何这种试图将引起类型不匹配错误。

但是,您也可以通过使用 WithEvents 关键字声明一个对象变量,并且设置该方法返回的引用为该变量,从而编程一个动态添加控件的事件,如下所示。

Option Explicit
'声明对象变量为 CommandButton 。
Private WithEvents cmdObject As CommandButton 

Private Sub Form_Load()
   Set cmdObject = Form1.Controls.Add("VB.CommandButton", "cmdOne")
   cmdObject.Visible = True
   cmdObject.Caption = "Dynamic CommandButton"
End Sub

Private Sub cmdObject_Click()
    Print "This is a dynamically added control"
End Sub

如果希望添加一个用户控件或任何 ActiveX 控件到您的窗体,必须或者把这个控件添加到“工具箱”,或者把控件的 License 关键字添加到 Licenses 集合中。有关详细信息请参阅“增加方法 (Licenses 集合)”。

注意 如果您添加一个 ActiveX 或用户控件到您的工程,但是没有在窗体中使用它,您也必须不要选定“工程属性”对话框的“生成” 选项卡上的“删除有关未使用的 ActiveX 控件”选项。如果您的应用程序试图添加该控件,那么该 Add 方法将失败,因为必需的信息已经被丢弃。

删除控件
要删除动态添加的控件,用“移除”方法。请注意,您只能删除那些用“添加”方法添加的控件(与用“Load”语句添加的控件进行对比)下面的示例删除一个动态添加的控件:

Form1.Controls.Remove "ctl1" ' 该控件的名称为 ctl1。

[解决办法]
我说的是动态加载控件的方法。
还有就是既然是用控件,就按控件的使用方法来弄,类的方法有点绕弯路的感觉。
如果想用多个控件,可以用控件数组的方法弄也很方便呀。
[解决办法]
VB工程文件包含引用组件和引用部件的配置信息,新工程可能在这方面缺失导致代码运行失败。
[解决办法]
那你就调试看看出错的问题在哪,根据提示的问题来解决呀
[解决办法]

引用:
看来你也不会~

我对于 FTP 这种东西可以纯用 SOCK API 写出服务器或客户端程序。
而且还可以写出满足专业要求的服务程序。
你认为能做到满足专业需求的客户或服务程序会在技术上不懂你的什么技术?
如果真的不懂,也是不懂你表达的是什么、到底想问什么和为什么硬要走这样的弯路而已。
[解决办法]
引用:
都用API搞定就不用VB了, .net也可以回避了 MS工作都白费了,我就是写一个小程序
很长时间没写程序了脑子僵硬了手生了 ,看你粘贴了这么多的说明文档也够辛苦的。

这个问题解决了不过根本原因我也没有找到以后慢慢体会吧。
套接字这东西好像这叫winSocket没搞过Linux开发更没用过你说的SOCK API 。

VB、VC、.net 都只是个开发工具而已,会用 API 开发不代表 MS 工作都白费,因为
即使是使用 API 也是 MS 提供的基本开发方式之一,这叫 Win32 SDK 方式,属于标准
的 Windows 开发方式,用控件或组件的方法只是 MS 提供的一种简易开发接口而已。
还有就是我粘贴给你的说明只不过是按下 F1 键 MSDN 里的内容而已,复制粘贴就搞定
了,不会辛苦。
至于你的问题,之所以没人给你满意的答案是因为你的表达能力有问题,自己都不知道
自己问题点在哪,甚至如何表述你的问题也不知道,这样的情况别人没法回答你的。
你把问题东绕绕西绕绕,别人就只有猜你在说什么,猜你的问题在哪,最后你还埋怨别人。
你应该先看看自己是否表达清楚了,再去要求别人吧。
[解决办法]
引用:
API很难避免内存的泄露所以完全用API开发程序的确实不多而且很累
VB、VC、.net JAVA 。 。。 只是工具目标是实现需求。
您没有看清我的问题可能是我没有表达清楚或者您理解力有问题
我一直以为凡是专业的技术员应当有技术共鸣的。

完全用API开发程序的不是不多,而是你认为不多,很多C/C++程序员都是走 Win32 SDK 路线搞开发的,
相对来说这种方式比 MFC 方式对系统了解得更透彻,而且也更容易获得官方资料,效率也更高。

如果你认为我的解力有问题我倒想问问,你自己看看你的帖子到底说了些什么?
我说的你又理解了多少?在没有具体接触过你的任何东西的情况下,全靠帮你猜
回答你的问题,如果换做我这么提问,你会知道我的问题在哪?你会知道我想问什么?
------解决方案--------------------


向高手学习了!

热点排行