Sea*_*ean 5 c# textbox panel winforms autoscroll
在C#应用程序中完成一个注册表单,我注意到如果我启用了AutoScroll,然后在滚动下面有一个文本框并点击它,它会一直跳到顶部.有没有办法用一些代码解决这个问题或者它是否合适?
Kla*_*aak 15
我曾经也有过一样的问题.我在我的面板中使用此代码修复了它:
protected override Point ScrollToControl(Control activeControl)
{
return this.AutoScrollPosition;
}
Run Code Online (Sandbox Code Playgroud)
由于显然以前没有人见过这种行为并且可以提供快速答案,因此我打开 Visual Studio 来尝试重现您所描述的内容。
我创建了一个新的 WinForms 项目,其中GroupBox包含一个Panel属性AutoScroll设置为“True”的项目。然后,我在 内部添加了两个新控件,GroupBox每个控件包含两个控件。第一个嵌入位于表单的顶部,在启动时完全可见;第二个嵌入位于底部,必须滚动到视图中。这相当于我从您的描述和视频中所能看到的最好的设计/布局。PanelTextBoxGroupBoxGroupBox
但是,当我运行该项目时,向下滚动到第二个嵌入并选择它包含的控件GroupBox之一,它的执行完全符合预期。我单击的控件获得焦点,而无需将整个面板滚动回顶部。我似乎无法重现您所看到的内容。如果您可以告诉我在设计测试示例时做错了什么,或者发布重新创建您正在经历的行为所需的最小示例项目,我也许可以提供帮助。TextBoxTextBox
否则,这里有一些需要调查的建议:
表单上对象的 Tab 键顺序。这确实不应该导致所描述的行为,因为单击一个控件应该将焦点设置到该控件,无论其在选项卡顺序中的位置如何,并且在我的示例项目中多次打乱选项卡顺序似乎仍然不会出现问题。具有相同的效果。但我想无论如何还是值得一试。在设计模式下,转到“查看”菜单,然后单击“Tab Order”。您可以设置 Tab 键顺序的所有控件的左上角都会有一个小彩色框,指示它们在每个容器中的 Tab 键顺序。要设置 Tab 键顺序,请按照您希望它们聚焦的自然顺序单击每个控件。
搜索代码中是否有任何<Control>.Focusor<Control.Select>语句。确保您没有任何验证代码在运行时以任何方式更改 Tab 键顺序。这可能会导致焦点跳回位于 顶部附近的控件Panel,迫使其自动滚动到新位置。
尝试在一个全新的、干净的项目中重现该行为。理想情况下,在 Visual Studio 中创建一个新项目,并以与遇到困难的项目中的完全相同的方式布置控件。这与我所做的相同,部分是因为我没有可以处理的特定项目,也因为这是解决特别棘手的行为的最佳方法。更有可能的是您的设计或源代码存在一些怪癖导致了这种行为,而不是控件本身的某种错误。但无论哪种方式,这都会让您确切地知道问题发生在哪里,这将使您更接近解决方案。