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

如何为ugTopActivity_ChartDataClicked添加FillSceneGraphEventArgs参数并解决报错?

解决"No overload for matches delegate"与空引用错误

首先得明确两个核心问题:

  1. 你直接修改事件处理程序的参数列表导致委托不匹配,是因为每个事件的委托签名是固定的——ChartDataClicked事件的委托只接受object sender和ChartDataEventArgs e这两个参数,框架触发事件时只会传递这两个值,所以你加第三个参数FillSceneGraphEventArgs ex肯定会报错。
  2. 你尝试把sender转成FillSceneGraphEventArgs是完全错误的:sender是触发事件的控件实例(也就是你的ugTopActivity图表控件),根本不是FillSceneGraphEventArgs类型,所以必然会得到null,触发空引用异常。

正确的解决方案:结合两个事件实现需求

你的目标是在图表点击时往场景图里添加Box,但FillSceneGraphEventArgs是FillSceneGraph事件的专属参数(这个事件负责场景图的绘制),所以我们需要把两个事件配合起来用:

1. 定义类级变量存储要添加的元素

在窗体/控件类里声明一个变量,用来临时保存点击时创建的Box:

private Box _boxToAdd;

2. 修改ChartDataClicked事件处理程序

在这里创建Box,但不要直接添加到场景图,而是把它赋值给类变量,然后触发图表重绘(这样会触发FillSceneGraph事件):

private void ugTopActivity_ChartDataClicked(object sender, ChartDataEventArgs e)
{
    // 先获取图表控件实例
    var chart = sender as YourActualChartType; // 替换成你的图表控件真实类型,比如UltraChart
    if (chart == null) return;

    // 从图表本身获取X、Y轴(这才是正确的获取方式)
    IAdvanceAxis x = (IAdvanceAxis)chart.Grid["X"];
    IAdvanceAxis y = (IAdvanceAxis)chart.Grid["Y"];
    
    // 创建Box并设置样式
    _boxToAdd = new Box(new Infragistics.Win.DataVisualization.Rectangle((double)x.Map(0), (double)y.Map(1), 50, 371));
    _boxToAdd.PE.Fill = Color.Black;
    _boxToAdd.PE.FillOpacity = 70;

    // 触发图表重绘,让FillSceneGraph事件执行
    chart.Refresh();
}

3. 添加FillSceneGraph事件处理程序

给图表的FillSceneGraph事件绑定处理方法,在这里把临时保存的Box添加到场景图:

private void ugTopActivity_FillSceneGraph(object sender, FillSceneGraphEventArgs ex)
{
    if (_boxToAdd != null)
    {
        ex.SceneGraph.Add(_boxToAdd);
        // 如果只需要添加一次,清空变量避免重复添加
        _boxToAdd = null;
    }
}

4. 绑定FillSceneGraph事件

确保在窗体初始化(比如Form_Load方法)里把事件和处理程序绑定:

private void Form_Load(object sender, EventArgs e)
{
    ugTopActivity.FillSceneGraph += ugTopActivity_FillSceneGraph;
}

为什么要这么做?

  • ChartDataClicked是用户交互事件,只负责响应点击动作,它的参数里没有场景图相关的对象;
  • FillSceneGraph是图表绘制时的事件,框架会自动传递FillSceneGraphEventArgs,里面包含了可操作的SceneGraph对象;
  • 通过类变量把点击时创建的Box传递到绘制事件里,就能顺利完成添加操作。

内容的提问来源于stack exchange,提问作者john true

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:41:19