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

C# WinForms Panel滚动条在Tooltip移动时跳动问题求助

自定义Tooltip触发滚动Panel异常跳动的问题解决

问题现象

开发仪表盘应用时,主内容区域为可滚动Panel,会根据选中页面加载对应的UserControl,该控件包含多组仪表盘图表和表格。自定义Tooltip原本可正常跟随光标显示,但点击任意图表后,每当Tooltip移动到光标位置时,Panel的垂直滚动条会随机跳至UserControl顶部附近。

核心代码

跳动发生在Tooltip移动过程中,相关处理代码如下:

private void ytdSalesChart_GetToolTipText(object sender, ToolTipEventArgs e)
{
    Chart control = sender as Chart;
    Panel parent = this.Parent as Panel;

    int ScrollPosStart = parent.VerticalScroll.Value;

    Debug.WriteLine($"Moving Tooltip! Scroll Pos: {ScrollPosStart}");
    if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
    {
        int i = e.HitTestResult.PointIndex;
        int seriesI = control.Series.IndexOf(e.HitTestResult.Series);
        DataPoint dp = e.HitTestResult.Series.Points[i];

        if (!chartTip.Visible)
        {
            chartTip.Visible = true;
        }
        chartTip.SetTitle(e.HitTestResult.Series.Name.Trim());
        chartTip.SetValLbl("Value: " + FormatNumber(dp.YValues[0]));
        chartTip.SetSeries("Branch: " + dp.AxisLabel);

        chartTip.SetSeriesColor(control.PaletteCustomColors[seriesI]);
        chartTip.Location = new Point(control.Parent.Location.X + e.X + 10, control.Parent.Location.Y + e.Y + 10);
        chartTip.BringToFront();
        Debug.WriteLine($"Finished Moving Tooltip! Scroll Pos: {parent.VerticalScroll.Value}");
        parent.VerticalScroll.Value = ScrollPosStart;
        this.ActiveControl = null; // 有帮助但未解决,也添加到图表点击事件中
    }
    else
    {
        chartTip.Visible = false;
    }
}

调试输出

Bug触发时(鼠标悬停图表瞬间多次触发事件),滚动到顶部(值为0)时的输出如下:

Moving Tooltip! Scroll Pos: 0
Finished Moving Tooltip! Scroll Pos: 194
Moving Tooltip! Scroll Pos: 87 

第三行是滚动跳动触发的第二次ytdSalesChart_GetToolTipText执行。


问题更新

测试发现,将窗体从全屏切换为窗口模式再切回可暂时停止该问题。@Jimi指出这并非Bug,而是默认行为的意外结果。推测可通过研究最大化按钮/Panel外组件交互时的焦点变化找到解决方案。


问题解决

感谢@Jimi的提示指引,已解决该问题。

内容的提问来源于stack exchange,提问作者Devon Bauman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:16:16