当WinForm面板滚动时,在面板中绘制按钮

6
在一个面板中,我绘制了控件,例如按钮/文本框,它们位于面板的起始位置(0,0)。这些控件在开始时处于不可见和禁用状态。我有一个在面板外部的按钮,当按下时会使这些按钮/文本框可见,并将它们定位到面板中的新位置。
问题在于,如果用户将面板滚动到某个(x,y)位置,然后按下“使可见”按钮,则该按钮的新(x,y)位置是从面板当前位置(x,y)而非面板顶部(0,0)计算的。
我想知道这是否是面板的正确行为,以及为了解决这个问题,我需要将this.VerticalScroll.Value视为(x,y)偏移量来重新定位按钮。

enter image description here


2
你需要使用面板的AutoScrollPosition属性来调整按钮的位置。 - Hans Passant
我有一张图片,但无法在SO上发布...需要更多的声望。@HansPassant 从MSDN AutoScrollPosition 看起来是我所需要的。myButton.Location = new Point( 0 + panel1.AutoScrollPosition.X, 0 + panel1.AutoScrollPosition.Y); - Dawit
@Neolisk 上述代码中的0表示我想要绘制的按钮的位置吗? - Dawit
@Neolisk 链接 - Dawit
@user66896:已经更新了你的问题。 - Victor Zakharov
显示剩余8条评论
2个回答

2
这是对我有效的方法。 当你获得你的按钮/文本框等的Y值时,请执行以下操作: relativeControlTop = theControl.Top - thePanel.AutoScrollPosition.Y; 当你设置顶部时,请执行以下操作: relativeControlTop = theControl.Top + thePanel.AutoScrollPosition.Y; 希望这可以帮到你。

0

不确定它是否对您的情况有所帮助,但我认为值得一试:

如果您使用Visual Designer设计面板,我建议使用两个面板:一个全尺寸面板容纳所有控件,其大小便于设计;另一个较小的面板具有预期的物理大小。然后,只需将大面板添加为较小面板的唯一子项(例如bottomPanel中的innerPanel)。

有关更多详细信息,请参见此文章Article: WinForms AutoScroll Experiment


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