C#控制台游戏OnClick绑定progressClick函数参数错误求助
解决CS7036错误:正确绑定带自定义参数的OnClick事件
问题核心
你遇到的CS7036错误,根源在于SVGElement.OnClick的类型是Action?——它要求绑定一个无参数的方法委托,但你的写法既不符合委托签名,也不是正确的绑定方式:
- 直接写
OnClick = progressClick(100)是在调用方法,而非绑定委托; - 原
progressClick方法带EventArgs args参数,和Action无参数的要求不匹配。
解决方案
步骤1:调整方法签名并使用Lambda绑定
先修改progressClick,去掉不需要的EventArgs参数:
public void progressClick(int Ycord) { AddElement( new Rectangle() { X = 150, Y = Ycord, Width = 10, Height = 60, Fill = "transparent", Stroke = "orange", StrokeWidth = 100 } ); Update(); }
然后在绑定OnClick时,用Lambda表达式包裹方法调用,把100作为参数传入:
AddElement( new Circle() { // 点击用的按钮 R = 100, CX = 550, CY = 500, Fill = "orange", Stroke = "red", StrokeWidth = 40, OnClick = () => progressClick(100) } ); Update();
为什么这样可行?
- Lambda表达式
() => progressClick(100)会生成一个无参数的委托,完美匹配Action?的类型要求; - 闭包机制会捕获
100这个值,在点击事件触发时自动传递给progressClick。
额外说明
如果后续发现OnClick实际是带EventArgs参数的委托(比如Action<EventArgs>),只需调整Lambda表达式即可:
OnClick = (args) => progressClick(args, 100)
同时把progressClick的签名改回public void progressClick(EventArgs args, int Ycord)即可。
内容的提问来源于stack exchange,提问作者gian12
相关产品推荐
相关产品推荐

