Ich habe ein dynamisches create button-Objekt, wo ich möchte, dass ein Ereignis an das mainform gesendet wird, wenn ich auf eine Schaltfläche in diesem Objekt klicke.Dynamisch erzeugtes Ereignis in C#
Ich habe den Code wie folgt:
class Class1
{
internal class FObj_BtnRow
{
private Button[] _Btnmembers;
internal event EventHandler<SelValue_EArgs>[] e_BtnMember; //subscribe to a change
internal class SelValue_EArgs : EventArgs//events args (selected value)
{//return arguments in events
internal SelValue_EArgs(Boolean ivalue) { refreshed = ivalue; }//ctor
internal Boolean refreshed { get; set; }//accessors
}
private Boolean[] _ActONOFFValue; //Pump=0, valveInput = 1, Shower = 3, Washtool = 4 , WashWPcs = 5
private Boolean ActONOFFValue(int number)
{
_ActONOFFValue[number] = !_ActONOFFValue[number];
{
if (e_BtnMember[number] != null && number == 0) e_BtnMember[number](this, new SelValue_EArgs(_ActONOFFValue[number]));
}
return _ActONOFFValue[number];
}
public FObj_BtnRow(String[] TxtBtn, String UnitName)//ctor
{
_Btnmembers = new Button[TxtBtn.Length];
e_BtnMember = new EventHandler<SelValue_EArgs>[TxtBtn.Length];
for (int i = 0; i < TxtBtn.Length/2; i++)
{
_Btnmembers[i].Click += new EventHandler(_Btnmembers_Click);
}
}
protected virtual void _Btnmembers_Click(object sender, EventArgs e)
{
int index = Array.IndexOf(_Btnmembers, (Button)sender);
ActONOFFValue(index);
}
}
}
Aber in der Linie: internal event Eventhandler [] e_BtnMember; der Compiler sagte mir, dass ich einen Delegierten verwenden sollte. Ich verstehe diese Bemerkung nicht gut, könntest du mir helfen? Am Ende sollte das Mainform nur die Ereignisschaltfläche abonnieren klicken Sie darauf.
Und dann in Haupt könnten wir es jetzt in der Zeile Objekt Mehrtasten, wenn eine Taste verwenden, wird ... wie diese angeklickt:
public void main()
{
String[] txtbtn = new String[] { "btn1", "btn2", "btn3" };
FObj_BtnRow thisbtnrow = new FObj_BtnRow(txtbtn);
thisbtnrow.e_BtnMember[0] += new EventHandler<FObj_BtnRow.SelValue_EArgs> (btnmember0haschanged);
}
public void btnmember0haschanged(object sender, FObj_BtnRow.SelValue_EArgs newvalue)
{
bool thisnewvalue = newvalue.refreshed;
}
Können Sie mir helfen? Vielen Dank im Voraus !!
Können Sie den Code bitte auf die minimale Menge reduzieren, die zur Demonstration dieses Problems erforderlich ist? – Enigmativity
Ich werde es tun. Vielen Dank. – Jablonovo
Die Zeile 'internes Event EventHandler [] e_BtnMember' ist ein Array von Delegaten. Es ist kein Delegierter. Das Schlüsselwort 'event' kann nur einem Delegaten vorangehen, –
Enigmativity