控件背景透明_radiobutton控件透明背景怎么实现 - CSDN
精华内容
参与话题
  • 有时候,我们需要将控件背景颜色设定为透明,比如说label(标签)控件。那么,如何将控件背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答案是否定的。看似很简单,...

    有时候,我们需要将控件的背景颜色设定为透明,比如说label(标签)控件。那么,如何将控件的背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答案是否定的。看似很简单,其实不然,在实际操作过程中,很让人抓狂,抓狂到让你怀疑人生。

    关于透明

    首先要解释一下,什么叫做透明。在C#这里,透明就是指透过控件的背景,可以看到其父控件(容器)表面的颜色。所谓的透明,其实就是将父控件表面的颜色设定为自己的背景颜色。

    设置控件背景颜色为透明的步骤和注意事项:

    以pictureBox上的label控件为例,设置label的背景为透明,可以看到pictureBoxs上的图片。
    (1)首先,将label控件的背景颜色设为透明(Transparent)。在属性窗口中设置,或者在代码中设置:label1.BackColor=Color.Transparent;
    (2)其次,将label控件的Parent属性设定为picturebox,也就是说,将pictureBox设为label的父控件。在代码中写上:label1.Parent=pictureBox1;或者pictureBox1.Controls.Add(label1);
    (3)最后,调整控件的位置。将label控件的位置(Location)重新设定一下,使其显示在pictureBox中合适的位置:这一步是非常重要的!这常常是出问题的地方,如果Location属性没设置好,有可能看不到标签。
    注意事项:
    (1)为什么将label控件的背景设为透明,透过背景看到的不是pictureBox的颜色,而是窗体的颜色?
    其原因是:label控件的父控件默认是窗体,当将label的背景颜色设为透明之后,看到的将会是窗体的颜色,即使你已经把label控件拖到pictureBox控件上面也无济于事。解决方法是,重新设置label的Parent属性,使label控件的父控件为pictureBox。
    (2)为什么将label的Parent属性设置为pictureBox之后,运行时发现label控件不见了,或者显示的位置不在拖放的位置?
    原因是:
    label等控件默认的父控件是窗体,一开始的时候,location属性也是相对于窗体的。当运行时,label父控件改为了PictureBox,那么location属性也将是改为相对于PictureBox。这里是重点,这是为什么标签不见的原因:加了label1.parent=pictureBox1这段代码之后,label的位置基准就变为PictureBox的了,但location的数值没有变,当location的数值比PictureBox的size还大的时候,label不会显示。因此,在设置完label1.parent=PictureBox1之后,还要设置location属性,比如label1.location=new point(0,0)。这时label显示在PictureBox的左上角。这是关于位置基准的问题,控件以谁为父亲,它的位置基准就一父控件的左上角为基准。在切换父控件的时候,要注意把位置也得调一下。同样是location=(100,100),以不同的控件作为父控件,显示的位置是不一样的。也就是说,显示位置不但跟数值有关,还跟选择的基准有关。

    例子

    在窗体上放一个pictureBox控件,并在其Image属性中放入一张图片,然后在pictureBox上拖放一个label控件。显示效果:pictureBox上显示图片,上面的label控件的背景是透明的,透过label控件可以看到pictureBox上的图片。
    (1)仅仅将label的背景设为透明

            private void Form1_Load(object sender, EventArgs e)
            {
                label1.BackColor = Color.Transparent;
            }

    运行效果:
    这里写图片描述

    可以看到,label的背景是窗体的颜色。

    (2)不仅设置背景透明,还将label的Parent属性改为pictureBox。

            private void Form1_Load(object sender, EventArgs e)
            {
                label1.BackColor = Color.Transparent;
                label1.Parent = pictureBox1;
                //pictureBox1.Controls.Add(label1);
            }

    运行效果
    这里写图片描述

    发现,label控件不见了。

    (3)不仅设置背景透明,将label的Parent属性改为pictureBox,还把Location属性重新设置为合适的值。

            private void Form1_Load(object sender, EventArgs e)
            {
                label1.BackColor = Color.Transparent;
                label1.Parent = pictureBox1;//将pictureBox1设为标签的父控件
                //pictureBox1.Controls.Add(label1);
                label1.Location = new Point(80, 80);//重新设定标签的位置,这个位置时相对于父控件的左上角
            }

    运行效果:
    这里写图片描述

    背景终于透明了!

    展开全文
  • C#控件背景透明的几种解决方案

    万次阅读 2012-07-06 16:01:08
    C#控件背景透明的几种解决方案 作者:肖凤斌 E-mail:binsweet@gmail.com 已经很少做winform程序了,最新参与了一个小项目,遇到了控件背景透明的功能要求,特在此总结一下,供有需要的同行参考。 0...

    C#控件背景透明的几种解决方案

    作者:肖凤斌 E-mail:binsweet@gmail.com


    已经很少做winform程序了,最新参与了一个小项目,遇到了控件背景透明的功能要求,特在此总结一下,供有需要的同行参考。

    0、背景透明的概念和分类

    背景透明是啥意思呢,就是背景透明。哈哈,废话了。其实你想过没有,要求不一样,实现的难道和技术手段也不一样。

    最基本的就是不显示控件自己的背景,那,那显示谁的背景?

    背景透明后,透过去显示谁,也就是说后面的谁不透明,这是问题的关键,换句话说,透明控件的parent是一个还是多个。

    1、简单的背景透明,parent是一个的情况

    a、自然透明,如图label1

    实现:把控件背景色设置成窗口背景色

    b、需要把picture设为parent才能透明的label2

    实现:this.label2.Parent = this.pictureBox1;

    c、本身就是label,只不过设置了Image属性,相当于加了背景图,自然也背景透明

    this.label3.Image = Image.FromFile("xfb.jpg");

    d、普通的label是不能跨控件透明的

    小结:对于背景是单一控件来说,背景透明都好实现,但是对背景是多对象来说说,要实现背景透明就比较难。

    2、背景是多个控件背景的透明

    说实话,很少有这种要求,更多的,是下面第三中情况。

    3、透明文字,半透明背景,最后后的背景任意



    这个效果类似于千千静听的桌面歌词,文字背景是全透明的,可以设置一个带颜色和透明度的背景。

    其实实现很简单,原理就是用了两个窗口,文字是一个透明窗口,带颜色和透明度的背景是一个打底窗口,应用的时候把这两个窗口的不要的属性都去掉,如边框,状态栏图标等,最后就是设置好两个窗口的大小和位置以及层级关系就Ok了。

    文字窗口背景透明this.TransparencyKey = this.BackColor; 显示文字 直接在 paint事件中drawstring

    带颜色和透明度背景窗口:直接用 backcolor 和 Opacity



    展开全文
  • C#学习笔记:设置label(标签)控件背景颜色为透明 有时候,我们需要将控件背景颜色设定为透明,比如说label(标签)控件。那么,如何将控件背景颜色设定为透明?是不是只要将控件的BackColor属性...

    C#学习笔记:设置label(标签)控件的背景颜色为透明


    有时候,我们需要将控件的背景颜色设定为透明,比如说label(标签)控件。那么,如何将控件的背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答案是否定的。看似很简单,其实不然,在实际操作过程中,很让人抓狂,抓狂到让你怀疑人生。

    关于透明

    首先要解释一下,什么叫做透明。在C#这里,透明就是指透过控件的背景,可以看到其父控件(容器)表面的颜色。所谓的透明,其实就是将父控件表面的颜色设定为自己的背景颜色。

    设置控件背景颜色为透明的步骤和注意事项:

    以pictureBox上的label控件为例,设置label的背景为透明,可以看到pictureBoxs上的图片。 
    (1)首先,将label控件的背景颜色设为透明(Transparent)。在属性窗口中设置,或者在代码中设置:label1.BackColor=Color.Transparent; 
    (2)其次,将label控件的Parent属性设定为picturebox,也就是说,将pictureBox设为label的父控件。在代码中写上:label1.Parent=pictureBox1;或者pictureBox1.Controls.Add(label1); 
    (3)最后,调整控件的位置。将label控件的位置(Location)重新设定一下,使其显示在pictureBox中合适的位置:这一步是非常重要的!这常常是出问题的地方,如果Location属性没设置好,有可能看不到标签。 
    注意事项: 
    (1)为什么将label控件的背景设为透明,透过背景看到的不是pictureBox的颜色,而是窗体的颜色? 
    其原因是:label控件的父控件默认是窗体,当将label的背景颜色设为透明之后,看到的将会是窗体的颜色,即使你已经把label控件拖到pictureBox控件上面也无济于事。解决方法是,重新设置label的Parent属性,使label控件的父控件为pictureBox。 
    (2)为什么将label的Parent属性设置为pictureBox之后,运行时发现label控件不见了,或者显示的位置不在拖放的位置? 
    原因是: 
    label等控件默认的父控件是窗体,一开始的时候,location属性也是相对于窗体的。当运行时,label父控件改为了PictureBox,那么location属性也将是改为相对于PictureBox。这里是重点,这是为什么标签不见的原因:加了label1.parent=pictureBox1这段代码之后,label的位置基准就变为PictureBox的了,但location的数值没有变,当location的数值比PictureBox的size还大的时候,label不会显示。因此,在设置完label1.parent=PictureBox1之后,还要设置location属性,比如label1.location=new point(0,0)。这时label显示在PictureBox的左上角。这是关于位置基准的问题,控件以谁为父亲,它的位置基准就一父控件的左上角为基准。在切换父控件的时候,要注意把位置也得调一下。同样是location=(100,100),以不同的控件作为父控件,显示的位置是不一样的。也就是说,显示位置不但跟数值有关,还跟选择的基准有关。

    例子

    在窗体上放一个pictureBox控件,并在其Image属性中放入一张图片,然后在pictureBox上拖放一个label控件。显示效果:pictureBox上显示图片,上面的label控件的背景是透明的,透过label控件可以看到pictureBox上的图片。 
    (1)仅仅将label的背景设为透明

            private void Form1_Load(object sender, EventArgs e)
            {
                label1.BackColor = Color.Transparent;
            }
    • 1
    • 2
    • 3
    • 4

    运行效果: 
    这里写图片描述

    可以看到,label的背景是窗体的颜色。

    (2)不仅设置背景透明,还将label的Parent属性改为pictureBox。

            private void Form1_Load(object sender, EventArgs e)
            {
                label1.BackColor = Color.Transparent;
                label1.Parent = pictureBox1;
                //pictureBox1.Controls.Add(label1);
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行效果 
    这里写图片描述

    发现,label控件不见了。

    (3)不仅设置背景透明,将label的Parent属性改为pictureBox,还把Location属性重新设置为合适的值。

            private void Form1_Load(object sender, EventArgs e)
            {
                label1.BackColor = Color.Transparent;
                label1.Parent = pictureBox1;//将pictureBox1设为标签的父控件
                //pictureBox1.Controls.Add(label1);
                label1.Location = new Point(80, 80);//重新设定标签的位置,这个位置时相对于父控件的左上角
            }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行效果: 
    这里写图片描述

    背景终于透明了!

    展开全文
  • 实现控件透明背景

    2019-07-27 05:14:48
    很多情况下,我们需要控件背景透明的,就是要求直接看到控件父窗口的背景颜色、背景位图,比如标签控件、单选Radio控件、复选Check控件,通常都要求在父窗口的背景上进行绘制。然而要求控件的画布透明,这个技术...

    很多情况下,我们需要控件的背景是透明的,就是要求直接看到控件父窗口的背景颜色、背景位图,比如标签控件、单选Radio控件、复选Check控件,通常都要求在父窗口的背景上进行绘制。然而要求控件的画布透明,这个技术在GDI的文档中没有看到Microsoft作任何说明,当然还是有别的办法。

     

    其一:如果程序支持桌面主题服务的话,则可调用主题服务的API来实现背景。我们先看看这个API:

    HRESULT DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc);

    这个函数就是专门用来绘制父窗口的背景的,其中的hwnd参数是子窗口的句柄,hdc也时子窗口的画布句柄,prc是子窗口需绘制的区域,这个函数实际是把父窗口的背景拷贝到子窗口上来,以这种方法达到透明。

     

    其二:如果程序不支持桌面主题服务,则不能使用上面的方法,比如程序运行在Windows 2000上。这时我们可以向父窗口发送WM_PAINT消息,不过此消息所附带的wParam参数是一个画布句柄:

    HDC dc = GetDC(NULL);

    HWND cWnd = ...;//子窗口句柄

    HWND pWnd = ...;//父窗口句柄

    RECT cRect;

    GetClientRect(cWnd, &cRect);

    HBITMAP bitmap = CreateCompatibleBitmap(dc, cRect.right, cRect.bottom);

    ReleaseDC(dc);

    HDC memDC = CreateCompatibleDC(NULL);

    HGDIOBJ oldBitmap = SelectObject(memDC, bitmap);

    //此处可以调用SetClipRect()等函数来限制绘制范围

    SendMessage(pWnd, WM_ERASEBKGND, (WPARAM)memDC, 0); 

    SendMessage(pWnd, WM_PAINT, (WPARAM)memDC, 0);

    //至此memDC上已经保存了父窗口的背景内容

    //用户可以调用BitBlt(...)等函数拷贝memDC的内容到子窗口的某个区域,这样就达到了透明效果;

    SelectObject(memDC, oldBitmap);

    DeleteDC(memDC); 

    DeleteObject(bitmap);

    上面的办法当然有限制,因为不是所有的父窗口都可以接受这种特殊的WM_PAINT消息功能,不过MSDN中提到大多数控件都有这个功能,大家要注意读它的文档内容。

     

    其三:如果上面的办法都不行的话,就剩下最笨的办法了,用GDI函数涂刷子窗口的背景,但你事先就要知道父窗口的背景颜色、背景位图等信息。比如拿父窗口的颜色来填充子窗口的背景,可以调用FillRect()等:

    //-------------------父窗口的背景是颜色的情况

    COLORREF pColor = ...;//父窗口的颜色

    HDC cDC = ...;//子窗口的画布句柄

    RECT cRect = ...;//子窗口需刷新的区域 

    HBRUSH brush = CreateSolidBrush(pColor);

    FillRect(cDC, &cRect, brush);

    DeleteObject(brush);

     

    //-------------------父窗口的背景是位图的情况

    HBITMAP pBitmap = ...;父窗口的背景位图

    HDC cDC = ...;//子窗口的画布句柄

    RECT cRect = ...;//子窗口需刷新的区域 

    POINT rp;

    SetBurshOrgEx(cDC, x, y, &rp);如果是位图刷子,则还需要调整画布的刷子原点偏移确保无缝

    HBRUSH brush = CreatePatternBrush(pBitmap);

    FillRect(cDC, &cRect, brush);

    DeleteObject(brush);

    SetBurshOrgEx(cDC, rp.x, rp.y, NULL);还原画布的刷子偏移

    转载于:https://www.cnblogs.com/MaxWoods/p/3742716.html

    展开全文
  • 一、为什么要将背景设为透明? 如下图,在图片上有一个控件背景是白色,太难看了。 二、怎么设置背景透明? 1、将鼠标移到控件上,点右键,再点:属性。如下图: 2、编辑属性:先选中:纯色填充,再点...
  • Button或者ImageButton的背景设为透明或者半透明透明 透明  颜色和不透明度 (alpha) 值以十六进制表示法表示。任何一种颜色的值范围都是 0 到 255(00 到 ff)。对于 alpha,00 表示完全透明,ff 表示完全...
  • 1.设置透明颜色代码(推荐用)  tvTitle.setBackgroundColor(Color.parseColor("#00000000")); 2.alpha设置透明度(不推荐用,坑多) 参数值0-255,值越小越透明; tvTitle.getBackground().setAlpha...
  • c#设置button、label等控件背景色为透明

    万次阅读 热门讨论 2015-02-09 11:47:41
    yous
  • WPF设置控件透明度、背景

    万次阅读 2012-05-28 14:55:51
    透明度:控件的Opacity属性,范围从0-1,0表示完全透明,看不见。 背景色:如果一个控件在想显示其父容器的背景色,则在其xaml代码中设置其 Background="{x:Null}"即可。 也可在其属性框中选择Background...
  • C# WinForm 透明控件 PictureBox透明

    万次阅读 2014-07-30 13:27:49
    1.要实现C# WinForm中的控件背景透明,可以通过设置控件的BackColor属性为Transparent,同时设置其父控件。因为在C#中,控件透明指对父窗体透明。如果不设置Parent属性,那么控件将只对Form透明,显示的时候...
  • C# WinForm中控件与背景透明

    万次阅读 2009-01-14 11:29:00
    要实现C# WinForm中的控件背景透明,可以通过设置控件的BackColor属性为Transparent,同时设置其父控件。因为在C#中,控件透明指对父窗体透明。如果不设置Parent属性,那么控件将只对Form透明,显示的时候都会...
  • 如果LABEL控件未放在其他控件上,如PICTURES控件或其他容器控件中,可以修改LABEL控件的 Backcolor属性-> web-> Transparent2.如果LABEL控件存在于其他控件中/或放置在其他控件上则上面的方法无效,需按下面的方法操作...
  • c#设置自定义控件透明背景

    千次阅读 2016-12-19 16:15:14
    public partial class UserControl1 : UserControl  {  public UserControl1()  {  InitializeComponent();  //设置Style支持透明背景色  this.SetStyl
  • 有时候,我们需要将控件背景颜色设定为透明,比如说label(标签)控件。那么,如何将控件背景颜色设定为透明?是不是只要将控件的BackColor属性设为Transparent(透明)就可以了呢?答案是否定的。看似很简单,...
  • 如:  Me.Label1.BackColor = Color.Transparent  Me.Label1.Parent = Me.dgvTracking
  • 要做到透明控件,有两种办法。 1,把父窗口中控件所在区域的背景先画到控件上。这种办法适合几乎所有的控件。 2,对于简单的控件,如Static、RadioButton、CheckBox,他们有特殊的办法。 下面就是第二种做法:...
  • QT 设置QTableWidget背景透明

    万次阅读 2015-08-26 10:17:34
    m_innerwidget->setStyleSheet("background-color:rgba(0,0,0,0)");
  • VC 透明滑动控件Slider Control

    千次阅读 2009-11-27 14:56:00
    操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为滑动控件设置背景透明 经常在编写有背景的程序时,滑动控件Slider Control看起来与背景十分不合,我们可以从CSliderCtrl派生自己的类出来,以实现这...
  • html控件透明与背景透明

    千次阅读 2008-05-17 16:11:00
    html控件透明与背景透明 如何实现一个控件的半透明效果? IE中关于半透明和透明控件的一些说明 、大家在有些时候希望自己做的控件是半透明或透明的,就像半透明的窗体一样,我经过一段时间的查询,发现这个是可以...
  • MFC 添加背景图片并让控件背景透明

    万次阅读 2013-05-11 11:32:19
    /*添加背景图片*/ BOOL CTOOLDlg::OnEraseBkgnd(CDC* pDC) {  // TODO: 在此添加消息处理程序代码和/或调用默认值  CDialog::OnEraseBkgnd(pDC);  HBITMAP m_hBitmap;  HDC m_hBkDC;  m_hBitmap =...
1 2 3 4 5 ... 20
收藏数 46,097
精华内容 18,438
关键字:

控件背景透明