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

rayyu1989 2012-07-25 11:44:00
由于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);
}
}


桌控快搜:http://www.370b.com 欢迎体验~
...全文
285 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
rayyu1989 2012-07-25
  • 打赏
  • 举报
回复




木头小菜 2012-07-25
  • 打赏
  • 举报
回复
帮顶。。。。。
rayyu1989 2012-07-25
  • 打赏
  • 举报
回复
难道这不是一种好的解决方案?

或者说大家已经都知道了?

肿么都木有人回复 -_,- 为什么我的输入框没表情

7,765

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧