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

