【问题标题】:Why does clicking in a text box cause an AutoScroll panel to scroll back to the top?为什么单击文本框会导致 AutoScroll 面板滚动回顶部?
【发布时间】:2011-05-20 10:22:34
【问题描述】:

在 C# 应用程序中完成注册表单,我注意到如果我启用 AutoScroll 然后在滚动下方有一个文本框并单击它,它会一直跳回顶部。有没有办法用一些代码来解决这个问题,或者这是一种礼貌?

用语言来解释对我来说有点困难,所以这里的a short video 显示了这种行为。

【问题讨论】:

  • 我无法重现此行为。请提供更多详细信息。
  • “滚动条下方的文本框并点击它”是什么意思?
  • 好的,这是它的视频。我试图解释它时遇到了问题。 vimeo.com/17483007
  • 有人有什么想法吗?它只是一个组框->启用自动滚动的面板->另一个组框->标签+文本框。有什么想法吗?
  • 我遇到了同样的问题,但在我的情况下,只有当第一次加载表单时,滚动才会下降到底部。有什么办法可以使用代码将其移回。

标签: c# winforms textbox panel autoscroll


【解决方案1】:

您可以使用 TableLayoutPanel" 代替 "Panel" 以避免滚动条改变它的位置。

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题。我在面板中使用以下代码修复了它:

    protected override Point ScrollToControl(Control activeControl)
    {
        return this.AutoScrollPosition;
    }
    

    【讨论】:

      【解决方案3】:

      我遇到了这个确切的问题。我不得不从表单上的面板中移除对接,这解决了问题。

      【讨论】:

      • 谢谢你,7年后,你刚刚结束了我2天的调试。问题是,当单击时,面板会获取指针相对于视口的位置,然后滚动到相对于自身的该位置,使其回到顶部。
      【解决方案4】:

      由于显然以前没有人见过这种行为并且可以提供快速答案,因此我打开了 Visual Studio 来尝试重现您所描述的内容。

      我创建了一个新的 WinForms 项目,其 GroupBox 包含一个 Panel,其 AutoScroll 属性设置为“True”。然后,我在Panelinside 中添加了两个新的GroupBox 控件,每个控件都包含两个TextBox 控件。第一个嵌入的GroupBox 位于表单顶部,在启动时完全可见;第二个嵌入的GroupBox 位于底部,必须将其滚动到视图中。从您的描述和视频中我可以看出,这相当于您所拥有的设计/布局。

      但是,当我运行该项目时,向下滚动到第二个嵌入的 GroupBox 并选择它包含的 TextBox 控件之一,它完全按预期执行。我点击的TextBox 控件获得了焦点,没有将整个面板滚动回顶部。我似乎无法重现您所看到的。如果您能告诉我我在设计测试样本时做错了什么,或者发布重现您遇到的行为所需的最小样本项目,我可能会提供帮助。

      否则,这里有一些需要调查的建议:

      1. 表单上对象的 Tab 键顺序。 这确实不应该导致所描述的行为,因为 单击 控件应该将焦点设置为该控件,无论其在选项卡顺序中的位置如何,并且在我的示例项目中多次混淆选项卡顺序,似乎仍然没有相同的效果。但我认为无论如何都值得一试。在设计模式下,转到“查看”菜单,然后单击“标签顺序”。您可以为其设置 Tab 键顺序的所有控件的左上角都有一个小彩色框,指示它们在每个容器中的 Tab 键顺序。要设置 Tab 键顺序,请按照您希望它们聚焦的自然顺序在每个控件上单击一次。

      2. 搜索您的代码以查找任何 <Control>.Focus<Control.Select> 语句。 确保您没有任何验证代码在运行时以任何方式更改 Tab 键顺序.这可能会导致焦点跳回位于您的 Panel 顶部附近的控件,从而强制它自动滚动到新位置。

      3. 尝试在一个全新的、干净的项目中重现该行为。 理想情况下,在 Visual Studio 中创建一个新项目并将控件布局完全相同相同您在遇到困难的项目中拥有它们的方式。这与我所做的相同,部分原因是我没有您的特定项目可处理,还因为这是解决特别棘手的行为的最佳方法。更有可能是您的设计或源代码有一些怪癖导致了这种行为,而不是控件本身的某种错误。但无论哪种方式,这都会让您确切地知道问题发生在何处,这将使您更接近解决方案。

      【讨论】:

      • 我实际上想通了,我将 AutoScroll 最大值设置为 1000 只是为了添加东西,但是一旦添加了所有内容,我就删除了该值,然后它开始正常工作。我猜只是一个奇怪的故障。
      • 我遇到了同样的问题,但在我的情况下,只有当第一次加载表单时,滚动才会下降到底部。有什么办法可以使用代码将其移回。
      猜你喜欢
      • 2021-07-11
      • 2012-09-17
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2023-03-04
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多