it-swarm.com.de

Wie mache ich ein Ereignis in der Benutzerkontrolle und lässt es im Hauptformular bearbeiten?

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.

53
Crash893

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 
}
114
James Johnson

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.

18
LarsTech

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)); 
    }    
}
11
Enigma State

eine der einfachsten Möglichkeiten ist, die Landa-Funktion ohne Probleme zu nutzen

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