我试图在xamarin中实现构造,这将允许我通过它们上面的两个主要按钮重新定义一堆按钮。问题是,单击第二个主按钮后,子按钮功能的两个部分都变为活动状态。因此,当我单击button1然后单击currency1button或currency2button时,代码按预期工作,但在我单击button2并尝试单击currency1button后,textView.Text=(""+currencyTable[startingCurrency].name)
和textView1.Text=(""+currencyTable[endCurrency].name)
都将执行。感谢您提供的任何帮助,抱歉我的英语不好。
button1.Click += delegate {
currency1button.Click += delegate {
startingCurrency=1;
textView.Text=(""+currencyTable[startingCurrency].name);
};
currency2button.Click += delegate {
startingCurrency=2;
textView.Text=(""+currencyTable[startingCurrency].name);
};
};
button2.Click += delegate {
currency1button.Click += delegate {
endCurrency=1;
textView1.Text=(""+currencyTable[endCurrency].name);
};
currency2button.Click += delegate {
endCurrency=2;
textView1.Text=(""+currencyTable[endCurrency].name);
};
};
答案 0 :(得分:0)
问题是您永远不会从按钮Click事件中删除代理。请注意,当您添加委托时,您使用" + ="运营商。在此上下文中,该运算符将另一个委托附加到事件。活动也支持" - ="运算符以删除委托。但是,为了删除委托,您需要保留对它的引用。
通常,我在这里使用方法,因为它更容易注册和取消注册方法,而不是保持对匿名委托的引用。让我们看看两者都在行动......
我将稍微简化一下我的代码并假设只有一个货币按钮。
使用捕获的匿名代表......
Action currency1buttonCase1Delegate = delegate {
// your handler code in here
};
Action currency1buttonCase2Delegate = delegate {
// your handler code in here
};
button1.Click += delegate {
// Remove click handlers
currency1button.Click -= currency1buttonCase1Delegate;
currency1button.Click -= currency1buttonCase2Delegate;
// Add the delegate that you want for this event
currency1button.Click += currency1buttonCase1Delegate;
}
button2.Click += delegate {
currency1button.Click -= currency1buttonCase1Delegate;
currency1button.Click -= currency1buttonCase2Delegate;
currency1button.Click += currency1buttonCase2Delegate;
}
将方法用作事件处理程序...
button1.Click += delegate {
// Clear all handles
current1button.Click -= Currency1ButtonCase1;
current1button.Click -= Currency1ButtonCase2;
// Add the one we want
currency1button.Click += Currency1ButtonCase1;
};
button2.Click += delegate {
// Clear all handles
current1button.Click -= Currency1ButtonCase1;
current1button.Click -= Currency1ButtonCase2;
// Add the one we want
currency1button.Click += Currency1ButtonCase2;
};
在课程的某个时刻,您必须使用匿名代表中的代码定义Currency1ButtonCase1和Currency1ButtonCase2方法。