【发布时间】:2019-09-09 02:34:30
【问题描述】:
我有一个从 Control 派生的自定义控件,它被动态添加到表单中。控件在 Location 中可以有负值,默认情况下相对于左上角绘制。
例如,如何使控件具有负坐标并相对于右下角进行绘制?
【问题讨论】:
我有一个从 Control 派生的自定义控件,它被动态添加到表单中。控件在 Location 中可以有负值,默认情况下相对于左上角绘制。
例如,如何使控件具有负坐标并相对于右下角进行绘制?
【问题讨论】:
问题标题和问题问两个不同的东西。
对于标题:是的,您可以进行相对放置,但您需要使用嵌套布局面板,例如 TableLayoutPanel 和 FlowLayoutPanel。他们应该能够完成大部分(如果不是全部)您想做的事情。
对于实际问题:
【讨论】:
我不确定您是否可以使用 Location 属性来做到这一点,而无需进行大量额外的编码。 但是(1)您可以将它的“锚”属性设置为右和下而不是上和左。然后,每次调整表单大小时,它都会相对于包含面板(表单)的右下角保持在同一位置。然后 (2) 可以将您的左上角位置设置为超出可见区域的值......所以每次调整表单(或面板)的大小时 - 控件将保持在可见区域之外。
希望对您有所帮助。
【讨论】:
你可以这样做
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 是相对于右下角的位置。锚点确保它在调整大小时保持在那里。
【讨论】:
我做了一个小班来管理位置和大小取决于容器大小:
http://www.codeproject.com/Tips/492814/Relative-design-components-on-WinForm
【讨论】: