-1
동적 인 버튼 객체가 있는데,이 객체 내부의 버튼을 클릭하면 mainform에 이벤트를 보내고 싶습니다.C에서 동적으로 생성 된 이벤트 #
는이 같은 코드가 있습니다
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);
}
}
}
을하지만 라인 : 내부 이벤트 핸들러 [] 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;
}
도와 드릴까요? 미리 감사드립니다 !!
이 문제를 설명하는 데 필요한 최소한의 코드로 코드를 줄이실 수 있습니까? – Enigmativity
나는 그것을 할 것이다. 감사. – Jablonovo
'내부 이벤트 EventHandler [] e_BtnMember' 행은 델리게이트의 배열입니다. 그것은 대의원이 아닙니다. 'event' 키워드는 델리게이트보다 앞서야 만합니다. –
Enigmativity