如何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
就更重要了。
我有一个包含图像的图片框(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
就更重要了。