如何post在图片框中心标注?

How to post label in center of picture box?

我有一个包含图像的图片框(sketchImage 模式),我想在图片框的中心制作一个透明的标签(包含数字)

所以为了使标签透明,我像这样使用 Parent(在表单加载事件中):

Label7.Parent = PictureBox2
Label7.BackColor = System.Drawing.Color.Transparent

但现在我遇到了问题!当我启动应用程序时,图片框底部的标签会出现吗?如何解决这个问题!!

我建议您将 Label 准确放置在设计器中您希望它出现的位置,然后在更改 Parent 时翻译 Location,即

Dim labelLocation = myLabel.PointToScreen(Point.Empty)

myLabel.Parent = myPictureBox
myLabel.Location = myPictureBox.PointToClient(labelLocation)

当您在设计器中添加 Label 时,其 Parent 将成为表单。上面的第一行获取表单上 Label 的屏幕坐标。第二行将 Label 从表单移动到 PictureBox,这会将 Label 移动到相对于 PictureBox 左上角的同一点,因为它是在表格的左上角。最后一行将 Label 移回原来的位置,方法是将这些屏幕坐标转换为相对于 PictureBox.

的客户端坐标

这里有一个扩展方法,您可以使用它对任何控件执行此操作:

Imports System.Runtime.CompilerServices

Public Module ControlExtensions

    <Extension>
    Public Sub ChangeParentMaintainingAbsoluteLocation(source As Control, newParent As Control)
        Dim absoluteLocation = source.PointToScreen(Point.Empty)

        source.Parent = newParent
        source.Location = newParent.PointToClient(absoluteLocation)
    End Sub

End Module

添加后,无论是直接添加到您的项目中,还是通过引用和导入,您都可以简单地在要移动的控件上调用该方法。在你的情况下,那将是:

Label7.ChangeParentMaintainingAbsoluteLocation(PictureBox2)

编辑:

也就是说,如果您特别希望子控件位于其父控件的中心:

Dim parentSize = parent.ClientSize

child.Location = New Point((parentSize.Width - child.Width) \ 2,
                           (parentSize.Height - child.Height) \ 2)

使用 ClientSize 是因为某些控件(尤其是表单)具有边框,并且这些边框也可能是不对称的。 PictureBox 是一个可能有边框的控件,使客户端大小小于整体大小。表格一般都会有边框,而且上比下厚,所以用ClientSize就更重要了。