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
相关产品推荐
相关产品推荐

