Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 是否可以在VB6中使用控件而不将其放在窗体上?_Forms_Vb6_Controls - Fatal编程技术网

Forms 是否可以在VB6中使用控件而不将其放在窗体上?

Forms 是否可以在VB6中使用控件而不将其放在窗体上?,forms,vb6,controls,Forms,Vb6,Controls,我很确定这个问题的答案,但我正在尝试各种方法来让一个非常顽固的项目运作起来。一个想法是尝试通过控件运行代码,而不在窗体上定义它 Dim objViewer As MyViewer Set objViewer = Controls.Add("MyViewer", "MyViewer1") objViewer.MaxPageSize = 100 objViewer.ResetPages objViewer.AddPageToView "C:\TestPage1.txt" 例如,我的原始代码如下所

我很确定这个问题的答案,但我正在尝试各种方法来让一个非常顽固的项目运作起来。一个想法是尝试通过控件运行代码,而不在窗体上定义它

Dim objViewer As MyViewer

Set objViewer = Controls.Add("MyViewer", "MyViewer1")
objViewer.MaxPageSize = 100
objViewer.ResetPages
objViewer.AddPageToView "C:\TestPage1.txt"
例如,我的原始代码如下所示:

frmProcess.MyViewer.MaxPageSize = 100
frmProcess.MyViewer.ResetPages
frmProcess.MyViewer.AddPageToView "C:\TestPage1.txt"
我已将其更改为:

Dim objViewer As MyViewer
objViewer.MaxPageSize = 100
objViewer.ResetPages
objViewer.AddPageToView "C:\TestPage1.txt"
我得到一个带有“运行时错误'91:对象变量或未设置块变量”的错误窗口

但似乎没有办法“设置”这个控件。这是不可能的,还是有其他不需要表单的方法

编辑:我最终放弃了整个活动路径,因为找到了一个替代解决方案,解决了我在表单冻结中遇到的问题。我不想删除此问题,以防其他人出现并从答案中受益,因为这些答案可能很有用。

在表单上尝试此方法

Dim objViewer As MyViewer

Set objViewer = Controls.Add("MyViewer", "MyViewer1")
objViewer.MaxPageSize = 100
objViewer.ResetPages
objViewer.AddPageToView "C:\TestPage1.txt"

ActiveX控件通常期望从其容器中获得许多服务,例如持久性。它们还以设置它们支持的实例化类型的方式进行“打包和标记”

虽然完全有可能以使许多可用服务成为可选的方式创建控件,但大多数控件都是从需要大量控件的模板代码创建的。大多数“在运行时可见”的控件都需要容器服务


然而,这并不意味着控件不能设计为支持无容器实例化。这种控件的一个众所周知的例子是Microsoft脚本控件1.0(MSScriptControl.ScriptControl),它可以以任何一种方式使用。

我过去也遇到过类似的情况。如果其他方法都失败了,你必须使用一个表单,你可以做一些粗糙的事情,比如

1) 将控件的.Left属性设置为负数(如-10000),这样控件就不会出现在窗体上,用户就看不到它了


2) 使整个表单不可见。

显示的代码相当于
Dim objViewer,因为MyViewer=Nothing
。没有创建控件。如果在项目中引用了该控件,请尝试设置objViewer=New MyViewer,否则请尝试使用CreateObject。定义
在表单上定义它。因为如果你的意思是创建它,那么就不是了。你怎么能在不存在的东西上运行代码呢?不计算。您必须创建一个对象,无论是通过IDE还是通过jac建议的代码。@jac是的,我应该指定这就是我所说的无法设置控件的意思。如果使用
new
,则会出现编译时错误“new关键字的使用无效”。我对控件的ActiveX dll有一个引用,因此我不确定还需要做些什么才能使其正常工作,除非引用oca与dll之间存在问题,对此我不是非常清楚。使用CreateObject,我在运行时得到“运行时错误'429:ActiveX组件无法创建对象”。我可能应该给出更多关于这方面的背景资料。此应用程序最初将窗体设置为不可见。问题是,控件冻结了,我在四处奔波,试图找到一种方法来运行它,而不让它发生这种情况。但是如果我只想把它藏起来的话,你的建议就行了。我真的想在没有表格的情况下做到这一点。尝试这段代码给了我两个结果:要么它抱怨控件已经存在(因为我在表单上放置了一个同名的控件),要么它说它不能用新名称添加它。