4 votes

Comment remplacer une méthode et un événement dans un contrôle d'utilisateur WinForm en C# ?

J'ai un contrôle personnalisé dans C# WinForms appelé BaseControl et là, j'ai une propriété appelée Selected .

Je veux organiser un événement SelectedChanged et méthode virtuelle OnSelecteChanged dans le contrôle de base et ils devraient se comporter de la même manière que nous l'avons fait dans la section Control pour de nombreuses propriétés, par exemple Click et OnClick méthode.

Cela signifie que toute personne qui dérive de mon BaseControl peut soit se lier à l'événement, soit passer outre l'option OnSelectedChanged méthode.

Ainsi, lorsque la valeur de Selected est modifiée, l'événement doit être déclenché et si la méthode est surchargée, le contrôle doit aller à cette méthode.

Je sais comment déclencher l'événement mais je ne sais pas comment le faire pour la méthode.

S'il vous plaît, guidez-moi...

3voto

Pieter van Ginkel Points 17057

Vous trouverez ci-dessous un exemple de la manière dont les événements doivent être mis en œuvre :

public class BaseControl : Control
{
    private object _selected;

    public object Selected
    {
        get { return _selected; }
        set
        {
            if (!Equals(_selected, value))
            {
                _selected = value;
                OnSelectedChanged(EventArgs.Empty);
            }
        }
    }

    public event EventHandler SelectedChanged;

    protected virtual void OnSelectedChanged(EventArgs e)
    {
        if (SelectedChanged != null)
            SelectedChanged(this, e);
    }
}

Avec cet exemple, vous pouvez remplacer OnSelectedChanged dans une classe surchargée, comme ceci :

public class MyControl : BaseControl
{
    protected override void OnSelectedChanged(EventArgs e)
    {
        base.OnSelectedChanged(e);

        // My own logic.
    }
}

1voto

Thomas Levesque Points 141081
private bool _selected;

public bool Selected
{
    get { return _selected; }
    set
    {
        if (value != _selected)
        {
            _selected = value;
            OnSelectedChanged();
        }
    }
}

public event EventHandler SelectedChanged;

protected virtual void OnSelectedChanged()
{
    var handler = SelectedChanged;
    if (handler != null)
        handler(this, EventArgs.Empty);
}

0voto

Jon Skeet Points 692016

Fondamentalement, vous ne déclenchez pas l'événement à partir de vos Selected Vous appelez la méthode et faites en sorte que la méthode appelle l'événement. Toute personne qui surcharge la méthode doit appeler base.OnSelectedChanged pour s'assurer que l'événement se déclenche toujours. Votre méthode devrait donc ressembler à quelque chose comme ceci :

protected virtual void OnSelectedChanged(EventArgs e) {
    EventHandler handler = Selected; // Or your own delegate variable
    if (handler != null) {
        handler(this, e);
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X