在可滚动面板中变为可见时图片框的位置错误

Wrong position of picturebox when turned visible in a scrollable panel

语境:

我正在使用 visual studio 2017 开发一个 windows 表单 c# 应用程序。

该应用有一个可滚动的面板 (AutoScroll = true),里面装满了按钮。

每个按钮都关联到一个图片框。

它们重叠,大小相同,共享相同的 Tag 属性。

标签是:0 表示 btn0 和 picBox0,1 表示 btn1 和 picBox1,等等...

单击按钮时,其 Visible 属性设置为 false,相应的 picBox 的 Visible 属性设置为 true

我的问题:

当 picBox 的可见性设置为 true 时,它​​不会 spawn/appear 在它放置在表单设计器中的位置...

它似乎没有在父面板中的相对位置生成...

这些图片可以帮助大家理解我的问题:

之前:

之后:

您几乎看不到 picBox5 的边框,但它们就在那里! (放大!哈哈)

在你提问之前:

是的,picBox 有好处 Tag (5)

该位置在设计器中很好,应用程序运行时不会更改。

我用调试器看了看,位置似乎不错...

我想知道 picBox 是否从父窗体而不是父可滚动面板获取它的位置?

如何让图片框出现在合适的位置?

我所要做的就是在考虑滚动条位置的情况下重置目标 picBox 的位置:

picBox.Location = new System.Drawing.Point(picBox.Location.X + panel.AutoScrollPosition.X, picBox.Location.Y + panel.AutoScrollPosition.Y);
picBox.Visible = true;

您还需要确保能见度的变化发生在搬迁之后

此可见性更改使滚动条改变其位置并导致重定位错误。