You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForm按钮点击报错:button10_Click不匹配EventHandler委托

解决Windows窗体按钮Click事件“没有与委托‘EventHandler’匹配的重载”问题

错误原因

Windows窗体按钮的Click事件依赖的EventHandler委托有固定签名:

void (object sender, EventArgs e)

你的button10_Click方法额外添加了ref Graphics g、ref EVFDataSet evfDataSet等参数,不符合委托要求的签名,因此无法绑定到按钮的Click事件,导致点击按钮时无法触发方法执行。而直接调用时你可以手动传入所有参数,所以能正常运行。

解决方案

方案一:将额外参数改为类成员变量

把需要的g、evfDataSet、iWidth、iHeight定义为窗体类的私有字段,然后修改方法签名匹配EventHandler:

// 先在窗体类中定义成员变量
private Graphics _g;
private EVFDataSet _evfDataSet;
private int _iWidth;
private int _iHeight;

// 修改后的按钮点击事件方法
private void button10_Click(object sender, EventArgs e)
{
    int cx = _iWidth;
    int cy = _iHeight;

    int iw = _evfDataSet.sizeJpegLarge.width;
    int ih = _evfDataSet.sizeJpegLarge.height;
     
    long left = _evfDataSet.zoomRect.x;
    long top = _evfDataSet.zoomRect.y;

    long x = left * cx / iw;
    long y = top * cy / ih;

    long width = _evfDataSet.zoomRect.width * cx / iw;
    long height = _evfDataSet.zoomRect.height * cy / ih;

    Pen pen = new Pen(Color.FromArgb(255, 255, 255));
    pen.Width = 3;

    int str = Convert.ToInt32(numericUpDown2.Value);
    for (int i = 0; i < str; i++)
    {
        varas.recty.DrawRectangle(pen, x + 1, y + 1, width + 1, height + 1);
    }
}

方案二:保留原方法,新增适配签名的事件处理方法

保留原有功能方法,创建一个符合EventHandler签名的方法,在其中调用原方法并传递所需参数:

// 原功能方法(可修改名称更清晰)
private void DrawZoomRectangle(ref Graphics g, ref EVFDataSet evfDataSet, ref int iWidth, ref int iHeight)
{
    int cx = iWidth;
    int cy = iHeight;

    int iw = evfDataSet.sizeJpegLarge.width;
    int ih = evfDataSet.sizeJpegLarge.height;
     
    long left = evfDataSet.zoomRect.x;
    long top = evfDataSet.zoomRect.y;

    long x = left * cx / iw;
    long y = top * cy / ih;

    long width = evfDataSet.zoomRect.width * cx / iw;
    long height = evfDataSet.zoomRect.height * cy / ih;

    Pen pen = new Pen(Color.FromArgb(255, 255, 255));
    pen.Width = 3;

    int str = Convert.ToInt32(numericUpDown2.Value);
    for (int i = 0; i < str; i++)
    {
        varas.recty.DrawRectangle(pen, x + 1, y + 1, width + 1, height + 1);
    }
}

// 适配Click事件的处理方法
private void button10_Click(object sender, EventArgs e)
{
    // 假设这些变量已在类中定义,根据实际情况获取引用
    ref Graphics g = ref _g;
    ref EVFDataSet evfDataSet = ref _evfDataSet;
    ref int iWidth = ref _iWidth;
    ref int iHeight = ref _iHeight;

    DrawZoomRectangle(ref g, ref evfDataSet, ref iWidth, ref iHeight);
}

内容的提问来源于stack exchange,提问作者Ridhdhi Vaghani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:05:27