我一直在修改事件,以更好地了解它们在非常普遍的情况下的使用。我很惊讶地发现以下内容,所以我可能正朝着错误的方向前进……我所做的本质是在单击按钮时将按钮更改为随机颜色:
窗体
public Form1()
{
ColorChanges KK = new ColorChanges();
KK.ColorEventHandler += handle_ColorChanges;
button1.Click += delegate { KK.ChangeColor(button1); };
}
事件类
class ColorChanges
{
*... properties & constructor*
public void ChangeColor(object sender)
{
*... randomly assign color to ColorEventArgs*
}
protected virtual void onColorEvent(object sender, ColorEventArgs e)
{
EventHandler<ColorEventArgs> ceh = ColorEventHandler;
{
if (ceh != null)
{
ceh(sender, e)
}
}
}
public event EventHandler<ColorEventArgs> ColorEventHandler;
}
自定义事件参数
public class ColorEventArgs : EventArgs
{
public Color xColor { get; set; }
}
事件处理程序
public void handle_ColorChanges(object sender, ColorEventArgs e)
{
if (sender is Button)
{
var ButtonSender = (Button)sender;
ButtonSender.BackColor = e.xColor;
}
}
所以编辑的问题是:
使用 EventHandler(TEventArgs) 委托有用吗? MS文档表明语法像
button1.Click += new EventHandler<AutoRndColorEventArgs>(handle_ColorChanges);
是正确的,但这不会到达我的代码以随机选择颜色和错误
“'handle_ColorChanges' 没有重载匹配委托 >'System.EventHandler'”
所以像
button1.Click += new EventHandler<AutoRndColorEventArgs>(KK.ChangeColor(button1));
或者
button1.Click += new EventHandler(KK.ChangeColor(button1));
错误说需要一种方法,如果我使用
“'handle_ColorChanges' 没有重载匹配委托 'System.EventHandler'”
Lambda 表达式帮助感谢您的支持答案
button1.Click += (sender,args) => KK.ChangeColor(s);
但这不允许取消分配,稍后将需要...
匿名代表也有同样的问题
button1.Click += delegate(object sender, EventArgs e)
{ KK.ChangeColor(sender); };
问题的症结在于我的颜色方法或其委托与按钮委托签名(对象、事件)不匹配。我不关心按钮 args 并想使用我自己的 HOW?