当表单滚动时,为什么控件位置会错误地定位?

5
考虑以下表单,其标签为“观察器”和按钮为“单击”: a label near the left edge of the form, with a button 点击按钮后,我将标签的“Left”设置为10(Label1.Left :=10;),此时显示如下图所示: form with label near left edge 然后,我将表单向右滚动: same form as before, but scrolled right so label is hidden 现在,点击按钮后出现了问题,如第四幅图所示: same form, scrolled left, but label visible near middle instead of left 标签的“Left”不再是10。它大于10,但我需要它是10。怎么办?
1个回答

6

Label1.Left := Form1.Left + 10;表示比当前窗口边界(Form1.Left)向左移动了10个单位。

因此,Label1.Left := 10;不总是产生相同的结果,它取决于Form1.HorzScrollBar.Position;

你需要这样编码:

Label1.Left := 10 - Form1.HorzScrollBar.Position  ;

您可以在设计时选择表单1中的组件并调整滚动条,就可以看到这种模式。您会注意到,在移动滚动条时,所选组件的对象检查器左值也会发生变化。
您可以这样理解:如果您有HorzScrollBar,那么如果添加组件并将它们的左值设置得很高,表单1的宽度不会增加,但是由滚动条处理的虚拟宽度将增加,所有协调值将给出相对于表单1而不是虚拟空间的值。

有人能告诉我在Visual Studio WinForms中是否使用相同的模式吗? - VibeeshanRC
@rakesh 如果你认为这是你想要的答案,你可以接受它作为解决方案,或者你可以给一些反馈。 - VibeeshanRC
+1 这确实是正确的答案。直到今天我才知道! - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接