加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

WinForm-具有透明背景的文本框

(2010-07-06 13:17:22)
标签:

透明背景

文本框

textbox

richtextbox

分类: C#

文本框控件不支持透明的背景色

    .NET环境下TextBox和RichTextBox是不支持透明背景色的。当我们在属性设计器中将它们的BackColor设置为Transparent时,会弹出一个警告窗口“属性值无效:控件不支持透明的背景色”。

    在网上一搜,有很多解决办法:

    (1)在代码中加入以下代码:textBox1.BackColor = System.Drawing.Color.Transparent;

    (2)通过继承TextBox进行简单设置样式ControlStyles.SupportsTransparentBackColor。

public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    }
}

    (3)如果不想自己做控件,提供一个比较丧心病狂的思路:

1. 创建一个窗体,无边框,TrancsparencyKey设置为跟TextBox一样;
2. 窗体上放一个TextBox,Dock属性设置为fill;
3. 在主窗体上放置一个Label,设置成透明;
4. 鼠标点击Label时,将自己做的窗体show出来,并且将label隐藏;
5. 焦点离开TextBox时,将TextBox的内容复制给Label。关闭无框窗体,显示label;
6. 其他细节就自己琢磨吧,比如鼠标外观啦,Tab键控制焦点移动啦之类。

 

    分析:

    方法(1):不可行。虽然编译能过,但会遇到运行时错误。因为WinForm不支持该控件的透明背景色。

    方法(2):不可行。虽然通过设置样式SupportsTransparentBackColor为真之后能够使文本框的背景色

             设置为Transparent,但是却达不到透明效果,背景色仍然不是透明的。

    方法(3):可行但却复杂。不是最佳方案,只能说是如果没有其他方案的情况下才使用该方法。

 

总结

    由于.NET框架本身对文本框控件背景色的支持不太好,所以必须使用一些更底层的WIN32函数才能解决。下面是从The Code Project上找到的一些好的实现方式,基本上都是使用底层WIN32函数解决的,具体的代码剖析留到后面有时间再做,现在可以直接方便的使用就行。

    这有一篇专门讲怎么使文本框背景透明的文章:How to make a TextBox/RichTextBox transparent

 

开源控件

AlphaBlendTextBox - A transparent/translucent textbox for .NET

http://s2/middle/48a45b95t7444f6e90131&690

 

Alpha Blended (Transparent Capable) TextBox and RichTextBox

http://s10/middle/48a45b95t8ab1a8568639&690

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有