2017-09-19 3 views
0

Ich habe Mühe, die MSDN code sample for the Control.VisibleChanged event Arbeit: Ich sehe nicht die MsgBox.Arbeitsprobe von Control.VisibleChanged Ereignis in vb.net

Private Sub Button_HideLabel(ByVal sender As Object, ByVal e As EventArgs) 
    myLabel.Visible = False 
End Sub 'Button_HideLabel 

Private Sub AddVisibleChangedEventHandler() 
    AddHandler myLabel.VisibleChanged, AddressOf Label_VisibleChanged 
End Sub 'AddVisibleChangedEventHandler 


Private Sub Label_VisibleChanged(ByVal sender As Object, ByVal e As EventArgs) 
    MessageBox.Show("Visible change event raised!!!") 
End Sub 'Label_VisibleChanged 
+2

Haben Sie AddVisibleChangedEventHandler irgendwo genannt, in Form_Load zum Beispiel ? – Benno

Antwort

1

Sie müssen die Ereignisse zu den Ereignishandlern "verdrahten".

Um zu beginnen, um den Code in HideLabel_Click aufgerufen werden zu erhalten, müssen Sie auf einen Klick auf die Schaltfläche namens "HideLabel" reagieren.

Es gibt zwei Möglichkeiten, dies zu tun: Sie können AddHandler oder die Handles Klausel verwenden.

letztere demonstrieren:

Option Strict On 

Public Class Form1 

    Private Sub HideLabel_Click(sender As Object, e As EventArgs) Handles HideLabel.Click 
     myLabel.Visible = False 
    End Sub 

    Private Sub myLabel_VisibleChanged(sender As Object, e As EventArgs) Handles myLabel.VisibleChanged 
     MessageBox.Show("Visible change event raised!!!") 
    End Sub 

End Class 

jedoch, werden Sie feststellen, dass die Nachricht selbst angezeigt wird, bevor das Formular angezeigt wird. Das liegt daran, was hinter den Kulissen passiert, um die Form zu erstellen.

Um dieses Ereignis zu vermeiden, können Sie die Handler hinzufügen können, nachdem das Formular angezeigt wurde:

Option Strict On 

Public Class Form1 

    Private Sub HideLabel_Click(sender As Object, e As EventArgs) Handles HideLabel.Click 
     myLabel.Visible = False 
    End Sub 

    Private Sub myLabel_VisibleChanged(sender As Object, e As EventArgs) 
     MessageBox.Show("Visible change event raised!!!") 
    End Sub 

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown 
     AddHandler myLabel.VisibleChanged, AddressOf myLabel_VisibleChanged 
    End Sub 

End Class 

andere Art und Weise, in VB2015 und später ist ein „lambda expression“ anstelle einem separaten Verfahren zu verwenden, obwohl dann können Sie nicht den Handler von der Veranstaltung mit RemoveHandler distanziere:

Option Strict On 

Public Class Form1 

    Private Sub HideLabel_Click(sender As Object, e As EventArgs) Handles HideLabel.Click 
     myLabel.Visible = False 
    End Sub 

    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown 
     AddHandler myLabel.VisibleChanged, Sub() MessageBox.Show("Visible change event raised!!!") 
    End Sub 

End Class 

Craig war so freundlich, [und ich zitiere wörtlich] Aufmerksamkeit auf die Bedeutung von Option Strict aufrufen, wenn Sie Handler hinzufügen s manuell mit AddHandler. Ohne sie erlaubt die "locked delegate convention" möglicherweise das Hinzufügen von Handlern, die nicht genau mit der Ereignissignatur übereinstimmen, die Sie später nicht entfernen können.

Mit dem gesagt, Option Strict On ist keine vollständige Absicherung: Beachten Sie, wie mein letztes Beispiel kompiliert und funktioniert auch mit der falschen Methodensignatur für den Handler.

[Ich vermute, dass die MSDN-Codebeispiel zunächst in C# als Teil eines umfangreicheren Beispiels erstellt wurde, so haben einige Teile in der Übersetzung und excerption verloren gegangen ist.]

+0

Vielen Dank, wünschen Sie, dass Sie Beispiele für mdsn schreiben, weil einige von ihnen wirklich keine Informationen haben :) –

+1

Ich würde die Aufmerksamkeit auf die Bedeutung von 'Option Strict' lenken, wenn Sie Handler manuell mit' AddHandler' hinzufügen. Ohne sie erlaubt die "locked delegate convention" möglicherweise das Hinzufügen von Handlern, die nicht genau mit der Ereignissignatur übereinstimmen, die Sie später nicht entfernen können. – Craig

+0

@Craig Das ist keine vollständige Absicherung: Beachten Sie, wie mein letztes Beispiel kompiliert und funktioniert, selbst mit der falschen Methodensignatur für den Handler. –

Verwandte Themen