另类思路解决textbox不支持(半)透明背景颜色的问题

来源:互联网 发布:js判断变量是否未定义 编辑:程序博客网 时间:2024/06/09 19:32

由于net平台的普及问题  为了尽可能的增加用户使用量  很多应用基于2.0写的 所以不考虑wpf

众所周知 winform 的textbox的颜色不能使用 带有 Alpha 属性的颜色 即半透明效果  度娘 谷哥 很久后也无法解决了该问题

忽然想到了下面的方法:

半透明的颜色 最终画在画布上叠加后 也是1个rgb颜色 取出来 就是我们要的颜色

仅适用于纯色 如果父标签有背景图片 这个暂时没法实现

有人要问了 既然只适用于纯色 那半透明的效果还有什么意义呢?


答:有的  在制作皮肤的过程中 比如在父标签背景变更的情况下 要让textbox 背景更改为 父标签的 Alpha = 30  ,这种方法就很适用


看效果:








上代码(调用这个静态函数返回的颜色赋值给textbox就可以):

VB.NET

''' <summary>    ''' 将有半透明效果的颜色转成没有半透明的颜色    ''' </summary>    ''' <param name="backcolor">背景色,一般为白色 Color.White</param>    ''' <param name="alphacolor">带alpha的颜色</param>    ''' <returns></returns>    ''' <remarks></remarks>    Protected Friend Shared Function Alpha2Color(backcolor As Color, alphacolor As Color) As Color        Using bmp As New Bitmap(1, 1)            Using g As Graphics = Graphics.FromImage(bmp)                g.Clear(backcolor)                Using br As New SolidBrush(alphacolor)                    g.FillRectangle(br, New Rectangle(0, 0, 1, 1))                End Using            End Using            Return bmp.GetPixel(0, 0)        End Using    End Function

C#

/// <summary>/// 将有半透明效果的颜色转成没有半透明的颜色/// </summary>/// <param name="backcolor">背景色,一般为白色 Color.White</param>/// <param name="alphacolor">带alpha的颜色</param>/// <returns></returns>/// <remarks></remarks>protected static internal Color Alpha2Color(Color backcolor, Color alphacolor){using (Bitmap bmp = new Bitmap(1, 1)) {using (Graphics g = Graphics.FromImage(bmp)) {g.Clear(backcolor);using (SolidBrush br = new SolidBrush(alphacolor)) {g.FillRectangle(br, new Rectangle(0, 0, 1, 1));}}return bmp.GetPixel(0, 0);}}