Cursor.Position和Cursor.SetCursorPosition()不会将光标移动到图表控件上

时间:2014-12-22 13:08:07

标签: c# winforms charts .net-4.0

我正在尝试在使用C#编写的应用程序中将光标捕捉功能添加到我的图表(WinForms控件)中。这是一些代码:

void chart_CursorPositionChanging( object sender, CursorEventArgs e ) {
    DateTime date = DateTime.FromOADate( e.NewPosition );
    if ( date.Equals( currentSnappedValue ) )
        return;

    var closest = dt.Select()
                    .OrderBy(
                        dr => Math.Abs( ( (DateTime)dr[ "Time" ] - date )
                            .TotalDays ) )
                    .FirstOrDefault();
    if ( closest == null )
        return;

    DateTime newSnappedValue = (DateTime)closest[ "Time" ];
    if ( !currentSnappedValue.Equals( newSnappedValue ) ) {
        currentSnappedValue = newSnappedValue;
        //chart.ChartAreas[ 0 ].CursorX.Position =
        currentSnappedValue.ToOADate();
        chart.ChartAreas[ 0 ].CursorX.SetCursorPosition(
            currentSnappedValue.ToOADate() );
        Debug.Assert(
            chart.ChartAreas[ 0 ].CursorX.Position == currentSnappedValue.ToOADate(),
            "Not moved" );
        SelectRow( currentSnappedValue );   // DataGridView row selection
    }
}

图表数据来自DataTable(dt变量),它也绑定到DataGridView。上面的代码用于将光标捕捉到现有DataPoint并在DataGridView中选择相应的行。这个DGV部分没有问题,图表部分没有问题。在UI中,光标保持在我单击的位置,并且没有移动到我尝试使用Cursor.Position属性或Cursor.SetCursorPosition()方法设置的位置(第一个在已发布的代码中注释)。我已经检查过,如果我使用SetCursotPosition方法,则将Position属性更改为所需的值。你知道为什么这两个都没有以图形方式移动光标吗?我是否需要在Chart控件或Cursor本身中设置某种切换为true / false?

也许那是因为我正在使用CursorPositionChanging事件?但CursorPositionChanged根本不会激活(如果我不允许用户光标选择)所以我不得不使用那个:(

0 个答案:

没有答案