2013年2月19日 星期二

[學習] 讓視窗保持在最上層


(一)
Dim frm備註 As New 詢價單備註編輯
frm備註.MyCallForm = Me
frm備註.ShowDialog()




(二)
此段程式碼是寫在同一個視窗(Form)

ShowDialog 的焦點會一直在被開啟的Form上
與之不同的是 Show 的焦點不會在開啟的Form上

所以當開啟時若要一直在焦點上的話
就必須在主視窗的Activated事件下寫段程式

又因為被開啟的Form 並不是MDI表單
所以必須在 Application.OpenForms 下去搜尋

在圖一的紅色框的範圍內連點兩下,則會使主視窗縮放
在紅色框外及黃色框外的範圍都無法點擊
雖然可點擊黃色框內的 button,但都是沒有反應的(ex:會更新主視窗的資料)
應該是因為 Activated 事件觸發後,其它事件(或反應)就會被攔截掉...(尚待解釋)
而 ShowDialog 則除本視窗外,其它視窗都無法點擊

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

     Dim frm As New 詢價單費用編輯
     'frm.TopMost = True
     'frm.Owner = Me.ParentForm
     'frm.Parent = Me.ParentForm
     'frm.Focus()
     'frm.Activate()
     frm.Show()
End Sub



Private Sub 詢價單資料輸入作業_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
        For Each f As Form In Application.OpenForms
            If f.Text.Equals("詢價單費用編輯") Then
                f.Activate()
                Exit For
            End If
        Next
End Sub




(三)
若要讓視窗長駐最上層
則使用 TopMost = True
此時的可以點擊其它視窗
只是被開啟的視窗會一直長駐在最上層而己
即使使用者切換至其它應用程式



Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

     Dim frm As New 詢價單費用編輯
     frm.TopMost = True
     'frm.Owner = Me.ParentForm
     'frm.Parent = Me.ParentForm
     'frm.Focus()
     'frm.Activate()
     frm.Show()
End Sub




而(一)及(二)
當使用者點選其它應用程式時,並不會顯示在最上層。



參考:
vb.net find form by title and edit control
VB.net視窗控制問題
利用SetWindowPos使表單永遠放到最上層!
如何在VB裡讓程式表單能夠最上層顯示
如何將 Form 顯示在最上層?
如何顯示其他Form卻又不讓其獲得Focus?
vb.net 轉移程式焦點
VB.Net Form關閉按鈕以及最上層顯示問題
請問如何讓開啟的form只在此視窗中最上層顯示
請問視窗最上層的問題
最上層FORM的鎖定
VB.Net Form顯示為最上層
當程式的前景被其他程式拿走時判斷並拿回前景
[C#]透過 SHDocVw 與 GetForegroundWindow 取得正在使用的 Internet Explorer 網址
[VB.NET]把.NET視窗嵌入.NET視窗或控制項

沒有留言:

張貼留言