0

私はVB.netが初めてなので、理解してください。私はMainWindow, Frame1, Frame2 (AdFrame1), Page1.

MainWindowPage1起動時からロードしますFrame1。目に見えるようMainWindow.vb classにするPublic SubがありFrame2ます。

その Public Sub を共有して、Page_Mouseup イベントを使用して Frame2 (AdFrame1) を表示するにはどうすればよいですか?

Public Shared Sub を試しましたが、次のエラーが表示されます。

MainWindow.vb のコード:

Private Sub MainWindow2_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseUp


        AdClick()

    End Sub



    Public Sub AdClick()



        Try


            clicks += 1

            If clicks >= 10 Then

                'After 5 seconds Adframe CloseLink and TextBlock1 will hide.
                AdFrame1.Visibility = Windows.Visibility.Visible
                CloseMainButton.Visibility = Windows.Visibility.Visible
                InitializeComponent()
                dpTimer = New DispatcherTimer
                dpTimer.Interval = TimeSpan.FromMilliseconds(10000)
                AddHandler dpTimer.Tick, AddressOf TickMe
                dpTimer.Start()

                clicks = 0

            End If
        Catch ex As Exception
            MessageBox.Show("Oops! Error X0123A1. Please contact us with error ASAP!", "Error!", MessageBoxButton.OK)
        End Try
    End Sub


    'After 10 sesonds auto close
    Private Sub TickMe()

        AdFrame1.Visibility = Windows.Visibility.Hidden

    End Sub

コードページ1.vb

  Private Sub Page1_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Me.MouseUp


            AdClick() (inaccessible due to protection)

        End Sub

では、AdClick() を Page1 と共有するにはどうすればよいでしょうか

4

1 に答える 1

3

まず、Sharedキーワードは可視性に関連していないことに注意してください。たとえば、メンバーはPublic Sharedまたはにすることができます。メンバーはC# のメンバーと同じです - クラスのすべてのインスタンスに共通です (参照: Private SharedVB.NETSharedの共有変数の使用とは? )static

実際の質問については、既に存在するイベントを接続することをお勧めします:

Class MainWindow2
    Private WithEvents _Page1 as New Page1

    Private Sub MainWindow2_MouseUp(sender As Object, e As MouseEventArgs) _
                                            Handles Me.MouseUp, _Page1.MouseUp 
        AdClick()
    End Sub

    Private Sub AdClick()
         'Do something
    End Sub
End Class

メソッドを公開することは、通常、間違ったアプローチです。何かをしたい場合MainWindowは、他のクラスが他の場所でそれをやろうとするのではなく、自分自身でそれを行う責任を負い続ける方がはるかに良いです。イベントでは、クリックされたことを知らせることPage1のみを担当します。MainWindowこれは、それMainWindowについて何をすべきかを決定するのに任せてPage1おり、に含まれているメソッドについて何も知る必要はありませんMainWindow

カスタム イベントを追加することもできますPage1。たとえば、ボタンがオンになっている場合:

Class Page1
    'make your own event
    Public Event Button1Click(sender As Object, e As RoutedEventArgs)

    Private Sub Button1_Click(sender As Object, e As RoutedEventArgs) _
                                                         Handles Button1.Click
        RaiseEvent Button1Click(sender, e)
    End Sub
End Class

そして次にMainWindow

Private Sub ClickHandle(sender As Object, e As RoutedEventArgs) _
                                                   Handles _Page1.Button1Click
    AdClick()
End Sub

これにより、ページ内のボタン クリックがメイン ウィンドウに伝播されます。

ページが実行時に作成される場合、WithEventsandは使用できませんが、次のHandlesことができます。

Dim newPage as New Page1
AddHandler newPage.MouseUp, AddressOf MainWindow2_MouseUp

ページの処理が終わったら、ページが範囲外になる前に必ずハンドラーを削除してください (ハンドラーは強力な参照を保持するためnewPage、ハンドラーがアタッチされたままガベージ コレクションされることはありません! --> メモリ リーク)。

RemoveHandler newPage.MouseUp, AddressOf MainWindow2_MouseUp
于 2013-05-28T16:21:02.383 に答える