2016-06-28 69 views
0

我正在編寫一個程序來生成一個VFP表單類,其中有很多標籤和單選按鈕(每個超過90個)。這是很容易的部分。 (是的,我知道這是很多單選按鈕,但這是用戶想要的)。將對象添加到正在定義的對象的子容器

我們在我們的應用程序中有幾個VCXs做類似的事情,但是沒有任何地方接近儘可能多的單獨控制。所以,我並沒有花費大量的時間拖放字段,並且意識到我碰巧擁有所有字段,選項和默認值的便利列表,我使用了Class中的'View Class Code'選項瀏覽器獲取代碼看起來像是什麼樣子的示例。然後我編寫了代碼來生成所需的所有片段的PRG。

我的實際問題是,通過「查看類代碼」的輸出代碼似乎包括無效的語法:

DEFINE CLASS form40 AS frmae 
    Height = 427 
    Width = 710 
    ScrollBars = 2 
    DoCreate = .T. 
    Visible = .T. 
    Name = "form40" 

    ADD OBJECT form40.cntouter.cntform40 AS cntctrls WITH ; 
    Top = 175, ; 
    Left = 2, ; 
    Visible = .T., ; 
    Name = "Cntform40" 

ENDDEFINE 

類frmae是一個類(從VCX),其包括稱爲「cntouter」集裝箱。 Class cntctrls是包含所有標籤/單選按鈕的容器。

問題是,顯然你不能在DEFINE CLASS命令中將ADD OBJECT添加到成員中。虛線語法會導致語法錯誤。然而,這種技術在「查看班級代碼」輸出中使用。

我懷疑我可以通過生成一個調用ADDOBJECT()將控件容器添加到cntouter的Init方法來解決此問題,但我寧願將它放在類定義中。

回答

2

「查看類代碼」選項不會生成可運行代碼;它從來沒有。

我對做你所需要的建議是用你想要的外觀創建一個選項按鈕類。然後,使用現有的列表來填充遊標並編寫通過它旋轉的代碼並將選項按鈕添加到容器類。

您需要知道的關鍵是您可以在IDE中運行影響在窗體設計器或類設計器中打開的窗體或類的代碼。這就是建築商所做的。因此,而不是生成一個基於代碼的類,使用代碼來創建一個視覺類。

+0

我沒有意識到'查看班級代碼'是無法使用的。格兒。 – LAK

+0

謝謝。知道生成的代碼不好是關鍵。我將建立我的類而不重試重用任何現有的代碼。 – LAK

1

如果你想在代碼中做到這一點,那麼首先你不應該像Tamar已經指出的那樣依賴視圖代碼。您可以在代碼中執行任何表單及其控件(除了一個或兩個activex控件外),但您需要了解如何對容器類型控件進行編碼。首先,要從類庫中添加一個類,您需要對其來源進行驗證。即:

add object myContainer as MyBeautifulContainer from myClasslib.vcx 

不起作用。相反,你需要在你的代碼來定義一個類是這樣的:

define class form40 as form 
* ... 
    add object myContainer as MyContainer with ... 
* ... 
enddefine 


define class myContainer as MyBeautifulContainer from myClasslib.vcx 
* additiobnal code if any 
enddefine 

其次,您需要首先創建自己的內部控制,然後根據需要添加,以創建最對象。

在設計時,你可以去命令窗口,彈出一個代碼窗口:

modify command [enter] 

,然後使用ASELOBJ()函數,你可以得到你所設計的窗體上的任何對象的引用。一旦您擁有所需的參考資料,您可以編程方式在該代碼窗口中添加和排列對象,選擇代碼並執行選擇(清除控件,更正代碼並在第一次無法正確執行時重試)。這是暫時的「做和扔掉」風格的建設者。

+0

謝謝你的回答。我當然可以完成我想要做的事情,但是我的問題是我信任'查看班級代碼'中的技術。現在我知道這是無效的,我將採取更基礎的方法來爲此表單構建類,而不是嘗試重新使用某些不良代碼。 – LAK