请问label如何对控件透明
vb.net吧
全部回复
仅看楼主
level 5
604731578 楼主
本人编了个文字剧情游戏,想把label弄成半透明,于是在label底下放了个半透明的picturebox。可是label的背景颜色Transparent只对窗体Form有效,对picturebox没有透明效果,怎么办?
2015年02月10日 13点02分 1
level 9
将label的父容器设置为picturebox
2015年02月11日 01点02分 2
是不是label1.parent=picturebox?我试过,这样一来整个label都看不到了
2015年02月11日 01点02分
@604731578 把坐标设置好,要相对于picturenbox 的坐标才行,不能用原来相对于窗体的坐标了
2015年02月11日 01点02分
@Yentre 我明白了。具体怎么弄相对坐标呢?
2015年02月11日 02点02分
回复 604731578 :就是你把picturebox作为窗体来看就行了啊,也是0.0到picture.width:picture.height
2015年02月11日 02点02分
level 12
楼上办法对。
2015年02月11日 05点02分 3
本当に?
2015年02月11日 10点02分
回复 604731578 :什么意思
2015年02月11日 10点02分
level 10
GDI绘制文本
''' <summary>
''' 显示的文本
''' </summary>
Dim labelText As String
''' <summary>
''' 文本的位置
''' </summary>
Dim labelRectf As RectangleF
''' <summary>
''' 文本的笔刷
''' </summary>
Dim labelBrush As Brush
''' <summary>
''' 文本的字体
''' </summary>
Dim labelFont As Font
Public Sub New()
' The Me.InitializeComponent call is required for Windows Forms designer support.
Me.InitializeComponent()
Me.AllowTransparency=True
'
' TODO : Add constructor code after InitializeComponents
'
labelRectf=New RectangleF()
labelRectf.Location=New PointF(10,10)
labelText="Hello VB.Net"
labelBrush=New SolidBrush(Me.ForeColor)
labelFont=Me.Font
End Sub
Protected Overrides Sub OnPaint(e As PaintEventArgs)
e.Graphics.DrawString(labelText,labelFont,labelBrush,labelRectf)
End Sub
2015年02月12日 01点02分 4
level 5
label有一个属性是设置背景色是否透明的,自己找找吧
2015年02月12日 01点02分 5
我知道。不过那个属性只是相对于窗体透明
2015年02月12日 05点02分
level 12
backcolor是transparent只能对于parent透明,parent是form所以无法透明,为透明需要更改parent,所以楼上办法对,不过在wpf中则无此问题,透明杠杠的
2015年02月13日 01点02分 6
改parent之后label显示不出来了,怎么回事
2015年02月14日 07点02分
参考楼下
2015年02月15日 13点02分
level 12
在这里,我们设置label的backcolor为transparent,开始,由于label的parent为form,所以label相对于form是透明的,但是对于他下面的picturebox就不是透明的了。如图
说明,transparent是对于他的父窗口透明。
所以我们为了让他在picturebox里透明,就需要把它的parent设成picturebox,有如下代码、
但是运行后我们发现没有label了。如图
这是为什么呢?原因是,当其被设置为picturebox的子控件时,他的所有属性只有parent一个改变了,其他都都还是原样,text还是label1,color还是transparent,name还是label1,。重要的是,他的Top,和Left也都是原来的,例如这里他的left是183,top是216,但是这里的top和left是相对的,本来他是在窗体左上角的下方216,右方138.
但parent改为picturebox后,他跑到了picturebox左上角的下方216,右方138.,如图
所以他就跑跑到外面1处去了你就看不到了,为了解决,可以使用下面的函数。
调用之即可。效果如图
2015年02月15日 14点02分 7
我完全懂了,已经照着你说的做好了,谢谢你这么认真负责
2015年02月15日 14点02分
回复 604731578 :[吐舌]
2015年02月15日 14点02分
child.Location = New Point(child.Left - parent.Left, child.Top - parent.Top) 这句应该这样,不然位置不对,可让我一顿测试
2015年03月23日 12点03分
回复 零一和M游戏 :不要在意这些细节
2015年03月23日 12点03分
level 1
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Label1.Parent = PictureBox1
ChangeParentFromForm(PictureBox1, Label1)
End Sub
Private Sub ChangeParentFromForm(ByVal parent As Control, ByVal child As Control)
child.Location = New Point(child.Left - parent.Left, child.Top - parent.Top)
child.Parent = parent
End Sub
End Class
楼上的代码 改了一处错误
2015年03月23日 12点03分 8
[大拇指]
2015年06月25日 08点06分
level 9
如果你用wpf的话,只是改个属性的问题。
同时可以定制圆角,旋转和动画。
2016年01月19日 11点01分 9
level 13
这种比较复杂的界面还是用WPF吧
---贴吧极速版 For UWP
2016年01月19日 16点01分 10
1