Dela via


Property-Changed händelser

Om du vill att kontrollen ska skicka meddelanden när en egenskap med namnet PropertyName ändras definierar du en händelse med namnet PropertyNameChanged och en metod med namnet OnPropertyNameChanged som genererar händelsen. Namngivningskonventionen i Windows Forms är att lägga till ordet Ändrad till namnet på egenskapen. Den associerade händelsedelegattypen för egenskapsändringshändelser är EventHandleroch händelsedatatypen är EventArgs. Basklassen Control definierar många egenskapsändringshändelser, till exempel BackColorChanged, BackgroundImageChanged, FontChanged, LocationChangedoch andra. Bakgrundsinformation om händelser finns under Events och Events i Windows Forms Controls.

Egenskapsändringar är användbara eftersom de gör det möjligt för användare av en kontroll att koppla händelsehanterare som svarar på ändringen. Om din kontroll behöver svara på en egenskapsfördelad händelse som den genererar åsidosätter du motsvarande OnPropertyName-Changed-metod i stället för att koppla ett ombud till händelsen. En kontroll svarar vanligtvis på en egenskaps ändrad händelse genom att uppdatera andra egenskaper eller genom att rita om en del eller hela dess rityta.

I följande exempel visas hur den FlashTrackBar anpassade kontrollen svarar på några av de egenskapsändringshändelser som den ärver från Control. För det fullständiga exemplet, se Så här: Skapa en Windows Forms-kontroll som visar framsteg.

protected override void OnTextChanged(EventArgs e) {
    base.OnTextChanged(e);
    Invalidate();
}

protected override void OnBackColorChanged(EventArgs e) {
    base.OnBackColorChanged(e);
    if ((baseBackground != null) && (!showGradient)) {
                baseBackground.Dispose();
                baseBackground = null;
    }
}
Protected Overrides Sub OnTextChanged(ByVal E As EventArgs)
    MyBase.OnTextChanged(E)
    Invalidate()
End Sub

Protected Overrides Sub OnBackColorChanged(ByVal E As EventArgs)
    MyBase.OnBackColorChanged(E)
    If (baseBackground IsNot Nothing) And Not ShowGradient Then
        baseBackground.Dispose()
        baseBackground = Nothing
    End If
End Sub

Se även