C# 未找到winform将同一事件处理程序添加到多个复选框

C# 未找到winform将同一事件处理程序添加到多个复选框,c#,winforms,C#,Winforms,我需要订阅同一功能的多个复选框的帮助。尝试复制此答案,但在尝试时显示functionName未找到 找不到类型或命名空间名称“GroupCheckBoxClick” void GroupCheckBoxClick(对象发送方,事件参数e) { } // 私有void setGroupChkBox(bool loadedFromDataRow) { List ApplyRewardCalcList=新列表{ckBxARC1、ckBxARC2、ckBxARC3、ckBxARC4、ckBxARC5、c

我需要订阅同一功能的多个复选框的帮助。尝试复制此答案,但在尝试时显示functionName未找到

找不到类型或命名空间名称“GroupCheckBoxClick”

void GroupCheckBoxClick(对象发送方,事件参数e)
{
}
//
私有void setGroupChkBox(bool loadedFromDataRow)
{
List ApplyRewardCalcList=新列表{ckBxARC1、ckBxARC2、ckBxARC3、ckBxARC4、ckBxARC5、ckBxARC6、ckBxARC7、ckBxARC8、ckBxARC9、ckBxARC10};
List FixedGroupPromoList=新列表{ckBxFGP1、ckBxFGP2、ckBxFGP3、ckBxFGP4、ckBxFGP5、ckBxFGP6、ckBxFGP7、ckBxFGP8、ckBxFGP9、ckBxFGP10};
对于(int r=0;r<10;r++)
{
//表示找不到GroupCheckBoxClick类型或命名空间
ApplyRewardCalcList[r]。鼠标向下+=新建组复选框单击;
}

您的代码中有几个错误

  • +=
    之后,只键入过程的名称,而不是
    new

  • 您的过程的签名必须与事件的委托人匹配。在这种情况下,它是具有以下签名的代理:

    private void CheckBox_MouseDown(object sender, MouseEventArgs e) {...}
    
    公共委托void MouseEventHandler(对象发送者,MouseEventArgs e)

因此,事件处理程序必须与此签名匹配:

private void CheckBox_MouseDown(object sender, MouseEventArgs e) {...}
注意鼠标的类型

IEnumerable<CheckBox> checkBoxesInMyGroup = ...

foreach (CheckBox checkBox in checkBoxesInMyGroup)
{
    checkBox.MouseDown += CheckBox_MouseDown;
}

private void CheckBox_MouseDown(object sender, MouseEventArgs e)
{
    CheckBox checkBox = (CheckBox)sender;

    // use the mouse event args to handle the mouse down on this checkbox
    this.ProcessMouseDown(checkBox, e);
}
由于您已将事件处理程序声明为private,因此您知道类外没有人可以订阅:您的类控制可以订阅事件的人,因此您可以确定发送者是一个复选框


最后:您确定要在按下鼠标而不是单击鼠标时做出反应吗?有时操作员会放下鼠标,并意识到自己犯了错误。他可以在向上移动鼠标之前将鼠标移开以取消鼠标单击。如果您在按下鼠标时做出反应,操作员将无法处理此类错误。

GroupCheckBoxClick是一种功能,而不是委托。您需要类似以下内容:
ApplyRewardCalcList[r]。鼠标向下+=新系统.EventHandler(GroupCheckBoxClick);
或者您可以直接删除新的,即:
ApplyRewardCalcList[r].MouseDown+=GroupCheckBoxClick;
为什么函数不起作用?我是从另一个答案复制的,请参见编辑。如果删除“new”关键字,函数会起作用。不能“new”函数。可以新建委托(这就是System.EventHandler)。()。如果您删除“new”并只执行函数名,编译器只会为您设置新System.EventHandler(MethodName);的快捷方式。我知道是的,它解决了问题,谢谢。
CheckBox checkBox = (CheckBox)sender;