У меня есть динамический объект кнопки создания, где я хочу, чтобы он отправлял событие в основную форму, когда я нажимаю кнопку внутри этого объекта.
У меня есть такой код:
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);
}
}
}
Но в строке: внутреннее событие EventHandler[] e_BtnMember; компилятор сказал мне, что я должен использовать делегат. Я плохо понимаю это замечание, не могли бы вы мне помочь? В конце главная форма должна подписаться только на кнопку события, которую она хочет щелкнуть.
И тогда в основном мы могли бы использовать его сейчас, когда нажимается кнопка в строке многокнопочного объекта... вот так:
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;
}
Вы можете помочь мне? Заранее спасибо!!
internal event EventHandler<SelValue_EArgs>[] e_BtnMember
представляет собой массив делегатов. Это не делегат. Ключевое словоevent
может предшествовать только делегату, - person Enigmativity   schedule 12.05.2017event
может предшествовать только делегату type. Делегат является экземпляром такого типа. Но да, проблема в корне такая, как вы описываете. К ОП: вам нужно свести проблему к хорошему минимально воспроизводимому примеру, который ясно показывает, что вы пытаетесь сделать. Совершенно непонятно, что вы ожидали от синтаксиса массива в своем объявлении. Я уверен, что в качестве ответа может быть предложена подходящая альтернатива, но то, какой должна быть эта альтернатива, на данный момент открыто для широкой интерпретации. - person Peter Duniho   schedule 12.05.2017