【问题标题】:How to make location of children controls in WinForms relative?如何使 WinForms 中子控件的位置相对?
【发布时间】:2019-09-09 02:34:30
【问题描述】:

我有一个从 Control 派生的自定义控件,它被动态添加到表单中。控件在 Location 中可以有负值,默认情况下相对于左上角绘制。

例如,如何使控件具有负坐标并相对于右下角进行绘制?

【问题讨论】:

    标签: c# position controls


    【解决方案1】:

    问题标题和问题问两个不同的东西。

    对于标题:是的,您可以进行相对放置,但您需要使用嵌套布局面板,例如 TableLayoutPanel 和 FlowLayoutPanel。他们应该能够完成大部分(如果不是全部)您想做的事情。

    对于实际问题:

    1. 为什么?
    2. 不,你不能。

    【讨论】:

      【解决方案2】:

      我不确定您是否可以使用 Location 属性来做到这一点,而无需进行大量额外的编码。 但是(1)您可以将它的“锚”属性设置为右和下而不是上和左。然后,每次调整表单大小时,它都会相对于包含面板(表单)的右下角保持在同一位置。然后 (2) 可以将您的左上角位置设置为超出可见区域的值......所以每次调整表单(或面板)的大小时 - 控件将保持在可见区域之外。

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        你可以这样做

        Point relativePos = new Point(-10, -10);
        control.Anchor = AnchorStyles.Right | AnchorStyles.Bottom;
        control.Location = new Point(this.ClientSize.Width - control.Width + relativePos.X, this.ClientSize.Height - control.Height + relativePos.Y);
        

        其中 relative pos 是相对于右下角的位置。锚点确保它在调整大小时保持在那里。

        【讨论】:

          【解决方案4】:

          我做了一个小班来管理位置和大小取决于容器大小:

          http://www.codeproject.com/Tips/492814/Relative-design-components-on-WinForm

          【讨论】:

          • 谢谢,看起来很有希望。我将在我的项目中对其进行测试。
          猜你喜欢
          • 1970-01-01
          • 2011-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-28
          • 1970-01-01
          相关资源
          最近更新 更多