WinForms: Übermitteln Sie Daten von einem Benutzersteuerelement an das übergeordnete Formular

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: WinForms: Übermitteln Sie Daten von einem Benutzersteuerelement an das übergeordnete Formular

by Guest » 22 Dec 2024, 19:49

Ich habe ein Formular und ein Benutzersteuerelement darauf. Und ich versuche, Daten vom Benutzersteuerelement an das Formular zu übermitteln.
Wenn der Benutzer mit dem Benutzersteuerelement interagiert, wird der Variablenwert eines Benutzersteuerelements geändert und ein Ereignis ausgelöst, auf das das Formular lauscht. Ich möchte, dass das Formular den aktuellen Wert dieser Variablen in einer Beschriftung anzeigt.
Ich habe ein Ereignis, einen Delegaten und den Ereignishandler für das Formular implementiert und es funktioniert, solange das Formular angezeigt wird der aktuelle Wert in einem Meldungsfeld.
Aber wenn ich möchte, dass er in einer Beschriftung im Formular angezeigt wird, funktioniert das nicht, weil der Ereignishandler statisch ist und ich versuche, den neuen Wert auf die Beschriftung anzuwenden , es gibt keinen Verweis darauf im Handler.
Ein alternativer Ansatz könnte darin bestehen, den Wert zunächst über das Ereignis zu übertragen – ich schätze, das wäre sogar noch besser, denn dann könnte die Variable als privat implementiert werden, aber ich habe keine Ahnung, wie man eine Variable lädt die Veranstaltung.
Kann mir hier jemand helfen? Ich habe noch nie mit selbst geschriebenen Ereignissen gearbeitet und weiß nicht, wie ich weitermachen soll.
Das ist die Form:
using System.Windows.Forms;

namespace Events
{
public partial class Form1 : Form
{
// Delegate
public delegate void MyUserControlEventHandler(MyUserControl sender);

public Form1()
{
InitializeComponent();
}

// EventHandler
public static void Form1_ListenToChanges(MyUserControl sender)
{
MessageBox.Show("Value was changed. Current value: " + sender.value.ToString());
//The following will not work:
//label1.Text = sender.value.ToString();
}
}
}

und das ist die Benutzersteuerung:
using System;
using System.Windows.Forms;
using static Events.Form1;

namespace Events
{
public partial class MyUserControl : UserControl
{
public int value;

// Event
public event MyUserControlEventHandler Value_Change;

public MyUserControl()
{
InitializeComponent();
Value_Change += new MyUserControlEventHandler(Form1_ListenToChanges);
}

private void button1_Click(object sender, EventArgs e)
{
value++;
// Raise event
if(Value_Change != null) Value_Change(this);
}
}
}

Top