【问题标题】:How can I fix location of a child control in form?如何在表单中修复子控件的位置?
【发布时间】:2013-05-12 16:22:35
【问题描述】:

我有一个按钮,我希望它始终位于表单上的相同位置(表单可见部分的左上角)。

示例如下:

因此,当我垂直或水平滚动时,按钮应该始终位于左上角并且应该可见。 我应该怎么做才能修复它?

【问题讨论】:

  • @Chepene 我试过了,但这没有帮助。当您需要在调整表单大小时将元素保持在同一位置时,锚点会有所帮助。

标签: winforms


【解决方案1】:

我猜你正在使用 Form 的 AutoScroll 功能。

如何将PanelAutoScroll = true 放在表单上并使用其滚动来代替?然后,您将能够在表单上放置一个按钮,但在此可滚动面板上。因此,滚动标尺将滚动视图面板内容,但按钮将保持固定在表单上。

如果您不想添加另一个容器组件,则可以在Scroll 事件上添加处理程序并调整按钮位置以响应表单滚动。 ScrollEventArgs 参数有 ScrollOrientationNewValueOldValue 来计算控件的新 X/Y 位置。

【讨论】:

  • 这是一个可能的选择,但为此我需要添加另一个不适合我的容器。如果没有其他可能,那么这就是答案。
  • 那么你需要在 Scroll 事件上添加处理程序并调整按钮位置以响应表单滚动。它的 ScrollEventArgs 参数有 ScrollOrientation 和 NewValue/OldValue 来计算控件的新 X/Y 位置。
  • 也许这将有助于捕捉鼠标滚轮:stackoverflow.com/questions/4429901/…。表单有 Control.MouseWheel 事件,你也可以尝试处理一下。
  • 好的,我试过这个。看起来一切都很好。谢谢!
【解决方案2】:

在表单上,​​放置一个Panel 并将其Dock 属性设置为Fill,并将AutoScroll 属性设置为True

您将所有其他控件放置在此面板中,但没有放置您想要保持可见的按钮。 右键单击面板-> 发送到后台。 Panel 将调整大小以匹配表格;滚动只会发生在面板中,因此按钮将始终保持可见(您可以在其上设置 Anchor:Left,Top)

为了能够滚动(使用鼠标滚轮),焦点必须位于可滚动区域内的控件上(Panel 内),而不是按钮上。为了防止按钮获得焦点:将TabStop设置为false;此外,当它被点击时,您还必须通过调用将焦点设置在另一个控件上:

this.SelectNextControl(the_button, true, true, true, true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多