“dateTimePicker1_ValueChanged”没有重载与委托“System.EventHandler”匹配
本文关键字:System 匹配 EventHandler dateTimePicker1 ValueChanged 重载 | 更新日期: 2023-09-27 18:21:08
private void dateTimePicker1_ValueChanged(object sender, Series myseries, int multiplier, EventArgs e)
{
if (datelimitsset == 1) {
var dt1 = dateTimePicker1.Value;
chart1.Series.Clear();
for (int i = 0; i < multiplier; i++)
{
config();
myseries.Points.AddXY(Convert.ToString(date[i]), Convert.ToDouble(array[i]));
string[] rowi = { Convert.ToString(date[i]), Convert.ToString(array[i]) };
dataGridView1.Rows.Add(rowi);
}
}
}
这给了我错误:
"dateTimePicker1_ValueChanged"没有重载与委托"System.EventHandler"匹配
我不完全了解事件处理程序,谁能给我建议?
System.EventHandler
的签名是(object sender, EventArgs e)
的,因此您需要将方法签名更改为以下内容:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
或者保留当前签名,并在订阅事件时使用 lambda 表达式作为委托适配器:
dateTimePicker1.ValueChanged += (object sender, EventArgs e) =>
dateTimePicker1_ValueChanged(sender, [your Series variable], [your int multiplier variable], e);
当您使用 lambda 表达式作为委托适配器时,您实际上是在创建一个符合System.EventHandler
签名的委托(它传递了一个object
和一个EventArgs
参数(,然后调用您的原始处理程序方法,传递满足dateTimePicker1_ValueChanged
方法所需的所有参数。
System.EventHandler 委托的参考文档。
编辑:DateTimePicker.ValueChanged 事件的示例处理程序的文档
这是因为处理程序必须具有EventHandler
委托指定的相同签名。
也就是说,您必须删除两个中间参数:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
}
就将这些参数传递到函数中的解决方法而言,您有几个选择......
- 将事件处理程序生成为匿名函数(根据 James 的答案(
- 从实例变量中存储和检索它们
- 将它们存储在 DateTimePicker 控件的
Tag
属性上,并在处理程序中解析它们
第二个选项应该足够明显...
第三个选项可能如下所示:
// In control initialization somewhere
dateTimePicker1.Tag = new DateTimePickerParams() { Series = myseries, Multiplier = multiplier }; // Where DateTimePickerParams is your own private class/struct defined explicitly for this purpose...
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
var ctl = sender as DateTimePicker;
var parameters = ctl.Tag as DateTimePickerParams;
var mySeries = parameters.Series;
var multiplier = parameters.Multiplier;
// Execute...
}
不能像这样向事件处理程序添加任意参数,方法签名必须与事件委托匹配。DateTimePicker
如何知道要传递哪些myseries
和multiplier
参数?