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.
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
}
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
.
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));
}
}
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);
};