不要在按钮单击时自动滚动

时间:2014-08-19 15:05:23

标签: vb.net winforms datagridview autoscroll flowlayoutpanel

我正在开发一个用作仪表板的应用程序。该表单包含一个包含多个datagridviews的flowlayoutpanel。 flowlayoutpanel设置为autoscroll,因为通常有更多的数据网格可以放在可见页面上。每个数据网格都有一个buttonclick事件,当选择特定列(3)时,该事件将打开图表格式。所有图表功能都可以正常工作。我遇到的问题是,当我单击一个仅部分可见的数据网格时,页面会滚动以将该数据网格视图完全带到页面上。因为这发生在点击(MouseDown)上,页面滚动得如此之快,以至于它实际上并没有触发clickevent,而是在列中选择了几个单元格,就好像用户点击/向下拖动列一样。

我希望发生的是当用户点击仅部分可见的数据网格视图时,图表将打开,然后页面将在图表关闭事件上滚动。如果所讨论的datagridview具有焦点,但实际上是在页面之外,则会发生这种情况。例如,如果我selet datagridview,然后向下/向上滚动直到它部分离开可见页面,然后单击第3列中的单元格。它将显示图表,然后在关闭图表时自动滚动。但是如果datagridview没有焦点,它会执行自动滚动操作。我已经尝试将flowlayoutpanel放在另一个面板中,这在某种程度上有效,但它不一致。

对于长篇描述感到抱歉,但我想尽可能详细。任何帮助将不胜感激。该应用程序使用VS 2013构建在.NET中。

1 个答案:

答案 0 :(得分:2)

这看起来类似于我在面板中使用多个datagridviews的问题,this article是我的解决方案。

简而言之,您需要做的就是创建一个自定义面板并覆盖ScrollToControl方法。我相信你可以用FlowLayoutPanel做同样的事情。

编辑: 您的CustomPanel类应如下所示(使用developer fusion转换的代码

Public Class CustomPanel
Inherits System.Windows.Forms.FlowLayoutPanel
Protected Overrides Function ScrollToControl(activeControl As System.Windows.Forms.Control) As System.Drawing.Point
    ' Returning the current location prevents the panel from
    ' scrolling to the active control when the panel loses and regains focus
    Return Me.DisplayRectangle.Location
End Function
End Class

如果这不起作用,您可以尝试继承常规Panel并在其中放置FlowLayoutPanel。