【发布时间】:2017-05-12 06:12:28
【问题描述】:
我有一个动态创建按钮对象,当我单击该对象内的按钮时,我希望它向主窗体发送事件。
我有这样的代码:
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; 编译器告诉我应该使用委托。我不明白这句话,你能帮我吗? 最后,主窗体应该只订阅它想要的事件按钮单击。
然后在 main 中,我们可以在单击对象多按钮行中的按钮时使用它...像这样:
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关键字只能在委托之前, -
@Enigmativity:准确地说,
event关键字只能在委托 type 之前。委托是这种类型的实例。但是,是的,问题基本上正如您所描述的那样。 致 OP: 你需要将你的问题减少到一个好的minimal reproducible example,它清楚地表明你正在尝试做什么。完全不清楚您希望在声明中使用数组语法会发生什么。我确信可以提供一个合适的替代方案作为答案,但目前该替代方案应该是什么有待广泛解释。
标签: c# dynamic delegates eventhandler