none
請問如何偵測 FORM 已被開啟, 不重複開個新的? RRS feed

  • 問題

  • 各位好:

    小弟使用 New 方式開啟別的 FORM, 但若在執行一次, 則會又開個新的.

    請問我要怎樣做, 才不會又開個新的, 而是把已開啟的 FORM 提到最上層?

    需求: 使用 show 而不是 showdialog, 因為我要能切回去.

    ps. 用這種方式開的 FORM 我也不知如何將他提到最上層...

     

    Code Snippet
    Private Sub button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button.Click
        'Sub_FORM.Show()
        Dim NewForm As System.Windows.Forms.Form = New Sub_FORM
        NewForm.Show()
    End Sub

     

     

     

     

    2007年7月28日 上午 08:52

解答

  • 你可以宣告一個共用變數 dlgSubForm ,永遠顯示這個。VB2005 可以直接用 Sub_Form.Show

     

    不然你就要用 Forms 來抓所有的 Form ,並用 TypeName 逐一判斷是否為 "Sub_FORM"

    2007年7月28日 上午 10:42
    版主
  • 你的需求適合共用變數方式

    dlg 結束時一樣呼叫 Dispose

    Show 之前做

    程式碼

    If IsNothing(dlg) Then

       dlg = New Sub_Form

    End If

    dlg.Show()

     

     

     

    2007年7月28日 下午 02:20
    版主
  • 這樣寫..

    Dim Form1 as Form

    If Form1 Is Nothing OrElse Form1.IsDisposed Then
       Form1 = New Form1()
       Form1.Show()
    Else
        Form1.Focus()

    End If

    2007年7月30日 上午 05:22

所有回覆

  • 你可以宣告一個共用變數 dlgSubForm ,永遠顯示這個。VB2005 可以直接用 Sub_Form.Show

     

    不然你就要用 Forms 來抓所有的 Form ,並用 TypeName 逐一判斷是否為 "Sub_FORM"

    2007年7月28日 上午 10:42
    版主
  • 謝謝您.

    我知道可以直接以 Sub_Form.Show 來開啟.

    但是在程式未結束下, 下次呼叫到他, 他裡面會存在上次的值.

    除非我在 Load 事件中把欄位通通清乾淨...

    呃. 有甚麼現成的方法可以直接把 FORM 給還原成初始設計的狀態嗎?

    2007年7月28日 下午 01:19
  • 你的需求適合共用變數方式

    dlg 結束時一樣呼叫 Dispose

    Show 之前做

    程式碼

    If IsNothing(dlg) Then

       dlg = New Sub_Form

    End If

    dlg.Show()

     

     

     

    2007年7月28日 下午 02:20
    版主
  • 這樣寫..

    Dim Form1 as Form

    If Form1 Is Nothing OrElse Form1.IsDisposed Then
       Form1 = New Form1()
       Form1.Show()
    Else
        Form1.Focus()

    End If

    2007年7月30日 上午 05:22