如果在300像素高的面板上放置一个400像素高的DataGridView,那么面板上会有一个滚动条,然后向下滚动以显示网格的下半部分,然后单击面板外的控件,然后单击网格中的一条线,面板向上滚动到顶部,并选择网格中的错误行.
它不仅仅是一个DataGridView; 它发生在任何高于面板的控件上,例如Infragistics UltraWinGrid,Rich Text Box.我把它作为Infragistics的一个bug提出来,但是他们说这是微软的问题.
我已尝试将所有相关事件用于控件,但Panel滚动在事件触发之前发生.
有什么建议?
这是由ScrollableControl类自动触发ScrollToControl事件引起的,并且事件处理程序滚动显示控件左上角的焦点.当可滚动容器控件仅包含一个控件时,此行为没有帮助.我对此行为感到非常沮丧,直到我发现如何阻止它.
停止此行为的方法是覆盖ScrollToControl事件处理程序,如下所示:
class PanelNoScrollOnFocus : Panel { protected override System.Drawing.Point ScrollToControl(Control activeControl) { return DisplayRectangle.Location; } }
用此面板控件替换面板控件.完成.