Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Don';t单击按钮时自动滚动_Vb.net_Winforms_Datagridview_Autoscroll_Flowlayoutpanel - Fatal编程技术网

Vb.net Don';t单击按钮时自动滚动

Vb.net Don';t单击按钮时自动滚动,vb.net,winforms,datagridview,autoscroll,flowlayoutpanel,Vb.net,Winforms,Datagridview,Autoscroll,Flowlayoutpanel,我正在开发一个用作仪表板的应用程序。该表单包含一个flowlayoutpanel,其中包含多个DataGridView。flowlayoutpanel设置为autoscroll,因为数据网格通常比可见页面上的数据网格多。每个datagrid都有一个buttonclick事件,该事件在选择特定列(3)时打开图表窗体。所有的图表功能都运行良好。我遇到的问题是,当我单击仅部分可见的datagrid时,页面会滚动以将datagridview完全带到页面上。由于这种情况发生在单击(鼠标向下)时,因此页面滚

我正在开发一个用作仪表板的应用程序。该表单包含一个flowlayoutpanel,其中包含多个DataGridView。flowlayoutpanel设置为autoscroll,因为数据网格通常比可见页面上的数据网格多。每个datagrid都有一个buttonclick事件,该事件在选择特定列(3)时打开图表窗体。所有的图表功能都运行良好。我遇到的问题是,当我单击仅部分可见的datagrid时,页面会滚动以将datagridview完全带到页面上。由于这种情况发生在单击(鼠标向下)时,因此页面滚动速度非常快,实际上不会触发clickevent,而是选择列中的几个单元格,就像用户单击/拖动列一样

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


对不起,描述得太长了,但我会尽量详细。任何帮助都将不胜感激。该应用程序是在.NET中使用VS 2013构建的。

这似乎与我在一个面板中使用多个DataGridView时遇到的问题类似,这是我的解决方案

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

编辑: 您的CustomPanel类应该如下所示(使用


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

t我尝试了此修复,但没有乐趣。我还尝试了DisplayRectangle的变体。位置被替换为AutoScrollPosition或AutoScrolOffset。没有一个具有所需的效果。也许您可以为我澄清一些事情(如果这是补救措施,请原谅)。你说创建自定义面板是什么意思?我的代码:公共类NoAutoScrollFlowLayoutPanel继承System.Windows.Forms.FlowLayoutPanel受保护的覆盖函数ScrollToControl(activeControl作为System.Windows.Forms.Control)作为System.Drawing.Point Return DisplayRectangle.Location End Function End Class抱歉,最后一位出现混乱。我试图发布我的建议修复版本。因为它在VB.NET中,所以有点不同。可能语法已关闭?我的代码:公共类NoAutoScrollFlowLayoutPanel继承System.Windows.Forms.FlowLayoutPanel受保护的覆盖函数ScrollToControl(activeControl作为System.Windows.Forms.Control)作为System.Drawing.Point Return DisplayRectangle.Location“AutoScrollPosition End Function End Classic”读起来有点困难,但您的代码似乎是正确的。请参阅我的编辑:)TDull,为糟糕的粘贴工作感到抱歉。无论如何,我更改了我的代码以使用CustomPanel命名约定,只是为了更好的度量,我还更改了paren tform的设计器中的类型。因此它从:天啊,习惯论坛发布。示例2:我重新检查了我的代码,它与您的代码匹配。我甚至更改了我的代码以使用CustomPanel命名约定ming约定,只是为了更好的衡量。根据您给我的链接上的一条评论,我尝试更改父窗体设计器中的类型。FlowLayoutPanel的名称为“actual”。我可以将Friend WithEvents位从“Friend WithEvents actual As FlowLayoutPanel”更改为Friend WithEvents actual As CustomPanel。
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