2014-10-16 71 views
2

我很確定這個答案,但我正在嘗試各種各樣的事情來獲得一個非常頑固的項目。一個想法是嘗試通過控件運行代碼,而不是在表單上定義它。是否可以使用控件而不將它放在VB6中的窗體上?

因此,舉例來說,我原來的代碼是這樣的:

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錯誤窗口':對象變量或未設置塊變量「。

但似乎沒有辦法'設置'這個控件。這是不可能的,還是有另一種方式來做到這一點,不需要表單?

編輯︰我最終放棄了整個活動的路徑,因爲發現了一個替代解決方案,解決了這個表單凍結的問題。如果有其他人出現,我不想刪除這個問題,並且可以從可能有用的答案中受益。

+0

所示的代碼等同於'昏暗objViewer作爲MyViewer = Nothing'。沒有創建控制。 – user2864740 2014-10-16 19:41:59

+2

嘗試設置objViewer =如果您的項目中引用了新的MyViewer,則嘗試使用CreateObject。 – jac 2014-10-16 20:12:02

+0

定義'在表單上定義它'。因爲如果你的意思是創造它,那麼沒有。如何在不存在的東西上運行代碼?不計算。您必須創建一個對象,無論是通過IDE還是通過像jac建議的代碼。 – George 2014-10-16 20:12:47

回答

1

試試這個表單。

Dim objViewer As MyViewer 

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

我真的很想在沒有表格的情況下做到這一點。嘗試這段代碼給了我兩個結果:要麼抱怨控件已經存在(因爲我已經在窗體上放置了一個名字的控件),或者說它不能用一個新名字添加它。 – 2014-10-17 15:44:14

0

ActiveX控件通常期望來自其容器的多個服務,例如持久性。它們也以「打包和標記」的方式設置它們支持的實例化類型。

請參閱Introduction to ActiveX Controls

雖然完全有可能創建控件以使許多可用服務成爲可選項,但大多數控件都是從需要大量控件的模板代碼創建的。而且大多數「運行時可見」的控件都需要容器服務。

但是,這並不意味着控件不能被設計爲支持無容器實例化。這種控制的一個衆所周知的例子是Microsoft腳本控制1.0(MSScriptControl.ScriptControl),可以使用這種方法。

1

我過去曾經有過類似的情況。如果一切都失敗了,你必須使用一個表單,你可以做一些粗糙的事情,比如

1)將控件的.Left屬性設置爲負數(比如-10000),這樣控件就不會出現在表單上中,用戶不能看到它

2)使整個表格中不可見..

+0

我應該在這方面給出更多的背景資料。這個應用程序最初的形式是隱形的。問題在於控制力正在凍結,而我正在試圖找出一種方法來運行它,而沒有發生。但是,如果只是隱藏它,我的想法就是建議。 – 2014-10-17 14:32:18