web-dev-qa-db-fra.com

Comment créer un événement dans Usercontrol et le faire gérer dans le formulaire principal?

J'ai un contrôle utilisateur personnalisé et je veux faire quelque chose de relativement simple.

Chaque fois qu'un chiffre numérique dans la valeur de cette commande utilisateur change, demandez au formulaire principal de mettre à jour une fenêtre d'affichage.

Ce n'est pas un problème si le NUD n'était pas dans un contrôle utilisateur mais je n'arrive pas à comprendre comment faire en sorte que l'événement soit géré par le mainform et non par le contrôle utilisateur.

53
Crash893

Vous devez créer un gestionnaire d'événements pour le contrôle utilisateur qui est déclenché lorsqu'un événement du contrôle utilisateur est déclenché. Cela vous permettra d'afficher l'événement en haut de la chaîne afin que vous puissiez gérer l'événement à partir du formulaire. 

En cliquant sur Button1 sur le contrôle utilisateur, je déclencherai Button1_Click qui déclenchera UserControl_ButtonClick sur le formulaire

Contrôle de l'utilisateur:

public event EventHandler ButtonClick;

protected void Button1_Click(object sender, EventArgs e)
{
    //bubble the event up to the parent
    if (this.ButtonClick!= null)
        this.ButtonClick(this, e);               
}

Forme:

UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick);

protected void UserControl_ButtonClick(object sender, EventArgs e)
{
    //handle the event 
}
114
James Johnson

Essayez de le cartographier. Essayez de placer ce code dans votre UserControl:

public event EventHandler ValueChanged {
  add { numericUpDown1.ValueChanged += value; }
  remove { numericUpDown1.ValueChanged -= value; }
}

alors votre UserControl aura l'événement ValueChanged que vous voyez normalement avec le contrôle NumericUpDown.

18
LarsTech

vous pouvez faire comme ceci ..... l'exemple ci-dessous montre une valeur de zone de texte (contrôle utilisateur) modifiée 

   // Declare a delegate 
public delegate void ValueChangedEventHandler(object sender, ValueChangedEventArgs e);
public partial class SampleUserControl : TextBox 
{    
    public SampleUserControl() 
    { 
        InitializeComponent(); 
    }

    // Declare an event 
    public event ValueChangedEventHandler ValueChanged;

    protected virtual void OnValueChanged(ValueChangedEventArgs e) 
    { 
        if (ValueChanged != null) 
            ValueChanged(this,e); 
    }    
    private void SampleUserControl_TextChanged(object sender, EventArgs e) 
    { 
        TextBox tb  = (TextBox)sender; 
        int value; 
        if (!int.TryParse(tb.Text, out value)) 
            value = 0; 
        // Raise the event 
       OnValueChanged( new ValueChangedEventArgs(value)); 
    }    
}
11
Enigma State

l'un des moyen facile de le faire est d'utiliser la fonction landa sans aucun problème comme

userControl_Material1.simpleButton4.Click += (s, ee) =>
            {
                Save_mat(mat_global);
            };
0
ardalan