none
表單讀取事件 RRS feed

  • 問題

  • 通常表單顯示前要載入的事件都是寫在 Form_Load 裡頭

    如果我希望程式是顯示表單後才觸發事件的話,例如一個 Sub 如下

    Sub FormFade()
        For FadeCount = 0 To 1 Step 0.1
              Me.Opacity = FadeCount
              Me.Refresh()
        Next
    End Sub

    要是把 FormFade() 放在 Form_Load 事件中就完全沒有效果了

    除了利用 Timer,還有什麼其他方式呢?
    2010年1月26日 上午 06:51

解答

  • 用Shown事件看看
    • 已標示為解答 A6Q745DD 2010年1月26日 上午 08:23
    2010年1月26日 上午 06:57
  • Hi!

    試試在 Form.Shown 事件 : 每當第一次顯示表單時發生。
    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.form.shown.aspx

    只有當第一次顯示表單時,才會引發 Shown 事件;後續的最小化、最大化、還原、隱藏、顯示或是使畫面失效和重繪的動作將不會引發這個事件。

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Opacity = 0
        End Sub
    
        Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
            FormFade()
        End Sub
    
        Sub FormFade()
            For FadeCount = 0 To 1 Step 0.001
                Me.Opacity = FadeCount
                Me.Refresh()
            Next
        End Sub
    End Class
    




    我的Blog .NET菜鳥自救會
    • 已標示為解答 A6Q745DD 2010年1月26日 上午 08:23
    2010年1月26日 上午 06:59
    版主

所有回覆

  • 用Shown事件看看
    • 已標示為解答 A6Q745DD 2010年1月26日 上午 08:23
    2010年1月26日 上午 06:57
  • Hi!

    試試在 Form.Shown 事件 : 每當第一次顯示表單時發生。
    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.form.shown.aspx

    只有當第一次顯示表單時,才會引發 Shown 事件;後續的最小化、最大化、還原、隱藏、顯示或是使畫面失效和重繪的動作將不會引發這個事件。

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Opacity = 0
        End Sub
    
        Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
            FormFade()
        End Sub
    
        Sub FormFade()
            For FadeCount = 0 To 1 Step 0.001
                Me.Opacity = FadeCount
                Me.Refresh()
            Next
        End Sub
    End Class
    




    我的Blog .NET菜鳥自救會
    • 已標示為解答 A6Q745DD 2010年1月26日 上午 08:23
    2010年1月26日 上午 06:59
    版主
  • 謝謝 阿尼 和 小歐ou 的回答,在 WindowsForm 下測試成功了,

    但在 WM 平台下 Handles MyBase.Shown 會出現找不到事件 Shown (有試過改成 Handles MyBase.Load,但出來並不是我所想要的結果)

    有沒有在 WM 平台下的解決方式呢?

    (抱歉因為我在這兩個平台都有這個問題,所以就發到這個版上了)

    懇請先進們賜教了
    2010年1月26日 上午 07:39
  • 2010年1月26日 上午 08:01
  • 沒有辦法呢,我先將這個問題結束,另外在行動開發版另開一篇描述詳細點的好了,感謝各位 :D
    2010年1月26日 上午 08:23
  • Hi,

    試試在Form.Load用Me.Show把表單顯示

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Show() '秀出表單
            FormFade()
        End Sub

        Sub FormFade()
            For FadeCount = 0 To 1 Step 0.1
                Me.Opacity = FadeCount
                Me.Refresh()
            Next
        End Sub

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年1月26日 上午 09:01
  • Hi,

    試試在Form.Load用Me.Show把表單顯示

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.Show() '秀出表單
            FormFade()
        End Sub

        Sub FormFade()
            For FadeCount = 0 To 1 Step 0.1
                Me.Opacity = FadeCount
                Me.Refresh()
            Next
        End Sub

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/

    感謝你的回覆,這個方法以前有試過了... :D
    2010年1月26日 上午 11:34