Ich habe eine benutzerdefinierte Benutzersteuerung und möchte etwas relativ einfaches tun.
Wenn sich eine Zahl nach oben im Wert dieses Benutzersteuerelements ändert, lassen Sie das Hauptfenster ein Anzeigefenster aktualisieren.
Dies ist kein Problem, wenn sich die NUD nicht in einer Benutzerkontrolle befand. Ich kann jedoch nicht herausfinden, wie das Ereignis vom Hauptformular und nicht von der Benutzerkontrolle behandelt wird.
Sie müssen einen Ereignishandler für das Benutzersteuerelement erstellen, der ausgelöst wird, wenn ein Ereignis aus dem Benutzersteuerelement ausgelöst wird. Auf diese Weise können Sie das Ereignis in der Kette aufblähen, um das Ereignis über das Formular zu bearbeiten.
Wenn Sie in der UserControl auf Button1
klicken, wird Button1_Click
ausgelöst, wodurch UserControl_ButtonClick
im Formular ausgelöst wird:
Nutzerkontrolle:
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);
}
Bilden:
UserControl1.ButtonClick += new EventHandler(UserControl_ButtonClick);
protected void UserControl_ButtonClick(object sender, EventArgs e)
{
//handle the event
}
Versuchen Sie es zu mappen. Platzieren Sie diesen Code in Ihre UserControl
:
public event EventHandler ValueChanged {
add { numericUpDown1.ValueChanged += value; }
remove { numericUpDown1.ValueChanged -= value; }
}
ihre UserControl
hat dann das ValueChanged
-Ereignis, das Sie normalerweise mit dem NumericUpDown
-Control sehen.
sie können dies wie folgt tun. Das folgende Beispiel zeigt, dass der Wert des Textfelds (Benutzersteuerelement) geändert wurde
// 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));
}
}
eine der einfachsten Möglichkeiten ist, die Landa-Funktion ohne Probleme zu nutzen
userControl_Material1.simpleButton4.Click += (s, ee) =>
{
Save_mat(mat_global);
};