【问题标题】:painting a button in winform panel while the panel is scrolled在面板滚动时在 Winform 面板中绘制一个按钮
【发布时间】:2012-10-29 21:35:25
【问题描述】:

在面板中,我绘制了控件,例如按钮/文本框,位于面板中从 (0,0) 开始。这些控件在开始时是不可见的和禁用的。我在面板外有一个按钮,可以在按下时使这些按钮/文本框可见,并将它们定位到面板中的新位置。

问题是如果用户将面板滚动到某个 (x,y) 然后按下“使可见”按钮,按钮的新 (x,y) 位置是根据当前 (x,y) 位置计算的面板 - 不是从面板的顶部 (0,0)。

我想知道这是否是面板的正确行为,要解决此问题,我需要在重新定位按钮时将 this.VerticalScroll.Value 视为 (x,y) 偏移量。

【问题讨论】:

  • 您需要使用面板的 AutoScrollPosition 属性来调整按钮的位置。
  • 图片插图有助于展示预期和当前的行为。
  • 我有一张照片,但无法发布...需要更多关于 SO 的声誉。 @HansPassant 来自 MSDN AutoScrollPosition 看起来像我需要的。myButton.Location = new Point(0 + panel1.AutoScrollPosition.X, 0 + panel1.AutoScrollPosition.Y);
  • @Neolisk 上面代码中的0是我要绘制的按钮的位置?
  • @user66896:发个链接,我编辑成图片。

标签: c# winforms scroll panel


【解决方案1】:

这对我有用。 当您获得按钮/文本框等的 Y 时:

relativeControlTop = theControl.Top - thePanel.AutoScrollPosition.Y;

当你设置顶部时:

relativeControlTop = theControl.Top + thePanel.AutoScrollPosition.Y;

希望对您有所帮助。

【讨论】:

    【解决方案2】:

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

    如果您要使用可视化设计器来设计面板,我建议您 使用两个面板:一个包含所有控件的全尺寸面板,其大小 便于设计;和具有预期目的的较小的 物理尺寸。然后只需将大的添加为唯一的孩子 较小的(如底部面板中的内部面板)。

    查看这篇文章Article: WinForms AutoScroll Experiment了解更多详情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多