none
重新載入的問題 RRS feed

  • 問題

  • 1.假設應用程式含有主目錄與 A 子系統。

    2.在 A 子系統的應用程式內,指定 DataGridView 目前儲存格為 (2, 2)。

    3.第一次由主目錄進入 A 子系統應用程式,DataGridView 目前儲存格能正確指定在 (2, 2)。

    4.離開 A 子系統應用程式,回到主目錄。

    5.再次進入 A 子系統應用程式,結果 DataGridView 目前儲存格是在(0,0)處,(2, 2) 的設定自動失效。

     

    請問,再次進入 A 子系統應用程式時,為何會產生上述 5 的狀況,且一些相關設定也一併喪失,疑惑的是,Load 程序的程式列都有再次執行,但怎會產生非預期的結果。

     

    敬請指導,謝謝。

    2008年2月13日 下午 02:43

解答

  • ShowDialog 方法載入的子視窗在關閉時,基於快取考量不會強制載出,你可以在 Form_Load 時重新做初始化,或是自行呼叫 Disponse 。

     

    線上手冊就有說明:

    ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref32/html/M_System_Windows_Forms_Form_ShowDialog.htm

     

    備註

    您可以使用這個方法,在應用程式中顯示強制回應對話方塊。當呼叫這個方法時,它隨後的程式碼直到對話方塊關閉之後才會執行。其中一個 DialogResult 列舉型別值可以指派給對話方塊,藉著指派它給表單上 ButtonDialogResult 屬性,或在程式碼中設定表單的 DialogResult 屬性。這個值接著由這個方法傳回。您可以使用這個傳回值,決定如何處理發生在對話方塊中的動作。例如,如果對話方塊關閉,並透過這個方法傳回 DialogResult.Cancel 值,您可以防止執行在呼叫 ShowDialog 之後的程式碼。

    當表單顯示為強制回應對話方塊時,按一下 [關閉] 按鈕 (表單右上角帶有 X 的按鈕) 會將表單隱藏起來,並將 DialogResult 屬性設定為 DialogResult.Cancel。不像非強制回應表單,當使用者按一下對話方塊的關閉表單按鈕或設定 DialogResult 屬性值時,.NET Framework 不會呼叫 Close 方法。反而表單會隱藏並可再次顯示,不需建立對話方塊的新執行個體。因為顯示為對話方塊的表單未關閉,當應用程式不再需要表單時,您必須呼叫表單的 Dispose 方法。

    ShowDialog 方法的這個版本不指定表單或控制項為它的擁有人。當呼叫這個版本時,目前使用中視窗變成對話方塊的擁有人。如果您想要指定特定擁有人,請使用這個方法的其他版本。

     

     

    2008年2月14日 上午 02:10
    版主

所有回覆

  • 通常所謂的子系統是指執行檔。

    則請確認執行檔是否有正確被載出,請利用工作管理員檢視並確認。

    2008年2月13日 下午 04:41
    版主
  • 1.感謝指導。

    2.抱歉,我所說的子系統,表達有誤,其實它只是主目錄下的一個應用程式。我使用 xxx.ShowDialog() 執行這些應用程式。

     

    敬請再指導,謝謝。

    2008年2月14日 上午 01:11
  • ShowDialog 方法載入的子視窗在關閉時,基於快取考量不會強制載出,你可以在 Form_Load 時重新做初始化,或是自行呼叫 Disponse 。

     

    線上手冊就有說明:

    ms-help://MS.MSDNQTR.v80.cht/MS.MSDN.v80/MS.NETDEVFX.v20.cht/cpref32/html/M_System_Windows_Forms_Form_ShowDialog.htm

     

    備註

    您可以使用這個方法,在應用程式中顯示強制回應對話方塊。當呼叫這個方法時,它隨後的程式碼直到對話方塊關閉之後才會執行。其中一個 DialogResult 列舉型別值可以指派給對話方塊,藉著指派它給表單上 ButtonDialogResult 屬性,或在程式碼中設定表單的 DialogResult 屬性。這個值接著由這個方法傳回。您可以使用這個傳回值,決定如何處理發生在對話方塊中的動作。例如,如果對話方塊關閉,並透過這個方法傳回 DialogResult.Cancel 值,您可以防止執行在呼叫 ShowDialog 之後的程式碼。

    當表單顯示為強制回應對話方塊時,按一下 [關閉] 按鈕 (表單右上角帶有 X 的按鈕) 會將表單隱藏起來,並將 DialogResult 屬性設定為 DialogResult.Cancel。不像非強制回應表單,當使用者按一下對話方塊的關閉表單按鈕或設定 DialogResult 屬性值時,.NET Framework 不會呼叫 Close 方法。反而表單會隱藏並可再次顯示,不需建立對話方塊的新執行個體。因為顯示為對話方塊的表單未關閉,當應用程式不再需要表單時,您必須呼叫表單的 Dispose 方法。

    ShowDialog 方法的這個版本不指定表單或控制項為它的擁有人。當呼叫這個版本時,目前使用中視窗變成對話方塊的擁有人。如果您想要指定特定擁有人,請使用這個方法的其他版本。

     

     

    2008年2月14日 上午 02:10
    版主
  • 1.感謝指導,辛苦了。

    2.確實是 Form.ShowDialog 方法惹的禍,改用 Show 執行應用程式就沒事了。

    謝了。

    2008年2月14日 上午 02:22