2012-05-28 39 views
0

我在vfp中創建了一個無模式窗體,並將showwindow屬性設置爲'0-in screen'。我在窗體中放置了一個按鈕,並在click方法中添加了'DO Form Form2'。 Form2又是一個無模式窗體,並且窗口屬性設置爲「0-屏幕」。我運行第一個表單,然後單擊按鈕。第二種形式出現。問題是我似乎無法設置/激活第一種形式,除非我先關閉第二種形式。它是否會以這種方式工作?如果是的話,爲什麼?這種情況有沒有解決辦法?在vfp中無模式窗體之間切換

其實,我的情況稍微複雜一點。我打開form1.If我單擊form1中的一個按鈕,form2顯示。兩種形式都在_screen。如果我點擊form1中的另一個按鈕,Form3會出現在Form2中。我當然希望這是可能的。 :)

謝謝你幫助我。

+0

謝謝您的建議。我會記住他們的。有時候,這些建議是我從未想過的新事物,我想真正嘗試它們,以便我不會因爲我找到了另一種解決方案而拒絕了一個好建議。 :) –

+0

是的,關於檢查答案,但如果他們也給你一種替代的思維方式,這也有幫助。或者......你可以回答你自己的問題,說明你是如何解決問題的,而且這是一個解決的問題,讓其他人不必費心嘗試重新回答。 – DRapp

回答

1

你可能會遇到的只是兩個窗口的大小相同(或者窗體2較大)並且只是物理上重疊窗體1 ...除非這兩個窗體都被設置爲最大化模式,該模式需要全屏查看區域。

這就是說,默認情況下,當VFP運行一個表單時,它基本上有一個與您的表單名稱相關的變量名稱......即:如果這些是您實際表單的名稱,則爲「Form1」和「Form2」我懷疑,但可能用於測試目的)。

所以,現在您正在運行您的示例,窗體1顯示,單擊按鈕,窗體2顯示。您可以在表單2上有一個按鈕,例如「回到表單1」(而不是重新運行表單1的另一個實例)。在該點擊事件,你可以做以下

if wexist("form1") 
    activate window form1 
endif 

同樣,在你的主要形式,如果你想回去,再次形成2,但不希望重新創建已打開的第二個實例形式,你可以有代碼類似

if wexist("form2") 
    */ Show the already loaded form 
    activate window form2 
else 
    */ Not loaded yet, do so now 
    do form form2 
endif 

至於出另一種形式中一種形式,你可以,但他們有時會有點痛的,只是一些習慣......他們被稱爲「表單集」。爲此,你基本上是把所有的表格預先製作成一個整體的「formset」。首先創建一個表單。然後,從「FORM」菜單項中,單擊菜單選項「Create Form Set」。它會爲您創建一個父級「formset」級別,並將表單移入子級位置。然後,從「FORM」菜單中,您可以再次選擇「Add New Form」,並根據需要添加。請注意,執行此操作時,它會構建所有表單,而不僅僅基於您明確執行「執行表單」呼叫以啓動下一個表單。您可以爲每個窗口設置標題,移動它們的物理位置等等......保存並運行窗體......然後您可以根據需要顯示/隱藏......但是可能會非常棘手。

另一種選擇你可以嘗試使用「容器」,並建立自己的類庫。容器不過是一個可以有其他控制的控件。好處是您可以構建一次,並將其用作表單的一部分,或根據需要以多種形式使用它,而無需繼續調用相同的第一種形式。例如,地址信息的容器。您可以爲公司,地址1,地址2,城市等設置標籤/文本框並保存。現在,您希望有一張發票,上面有發貨單和帳單。您可以在同一個表單上使用同一個「佈局」容器類的兩個實例。他們看起來和操作相同,你只需將「控制源」綁定到各自的領域。

通過這樣做,您還可以使用「選項卡式頁面」並構建與一個「頁面」關聯的所有內容的容器。然後將該容器放在頁面上,而不是所有控件都單獨放在一個表單中......預先花費更多時間,但下游管理也可以帶來好處。

+0

我爲我的項目製作了側面板(就像控制面板中的一個)。我之前提到的form1是sidepanel。我使用了form2,因爲我可以設置form1和form2的大小和位置,並防止它們被重新計算。然後,我想在form2中打開form3,這樣當form3被最大化時,它只填充form2區域,而不是整個屏幕。感謝您的答覆。 –

-1

如果你有兩種形式modedeless你可以嘗試使用第二種形式與prg中間的paremeter語句一個應用程序。 樣品:在第二形式

PARAMETERS xparform 

IF PARAMETERS() = 1 

     DO FORM secondform WITH xparform 

    endif 

:** 在療法第一形式的方法來調用第二:**

LOCAL cvar 

cvar="F_"+ALLTRIM(TRANSFORM(SYS(3))) 

PUBLIC &cvar 

&cvar=THISFORM && instance the first form in a public var (dont forget relese this in unload methode) 

DO secondform.app WITH cvar 

thisform.hide 

在第二形式PRG主。

創建屬性以包含參數

在init方法:

PARAMETERS xparsecod 

IF PARAMETERS() > 0 

    IF PARAMETERS() = 1 

    thisform.formfirst=xparsecod 

    endif 

endif 

在卸載

IF !EMPTY(thisform.formfirst) 

    LOCAL cprince,oprince 

    cprince=ALLTRIM(thisform.formfirst) 

    oprince=&cprince && instanciate the firsform object 

    IF TYPE("oprince")=="O" 

     oprince.show && show the first form 

     oprince=null 

    ENDIF 

ENDIF   
thisform.Release 

該力的第二形式來顯示第一種形式完成後 不要忘記釋放公共變種

嘗試一些像:

if type("namevar") <> "U" 

    namevar=null 

    release namevar 

endif