none
C#设置按钮背景色透明问题 RRS feed

  • 问题

  • 我有一个窗体,窗体的背景是一个图片.现在在该窗体上放一个按钮使该按钮背景色为透明(即显示出该窗体的图片),而该按钮的文正常显示.请问应该怎么做.我设置button1.BackColor = Color.Transparent;没有反映.谢谢大家!

    fang
    • 已移动 Sheng Jiang 蒋晟Moderator 2009年3月13日 19:24 Windows表单类库问题 (从 Visual C# 移动到 .NET Framework 一般性问题讨论区)
    2009年3月11日 0:30

答案

  • 我刚才这样测试了,还是不行啊!
         public partial class Form1 : Form
        {
            private TransparentButton myButton = new TransparentButton();       
            public Form1()
            {
                InitializeComponent();           
                myButton.Parent = this;
               
                this.Controls.Add(myButton);                          
            }
        }
        public class TransparentButton : Button
        {
            public TransparentButton()
            {
                SetStyle(ControlStyles.SupportsTransparentBackColor|ControlStyles.UserPaint, true);
                this.BackColor = Color.Transparent;                    
            }
        }


    周雪峰
    • 已标记为答案 chinafcl 2009年3月12日 1:12
    2009年3月11日 11:21
    版主
  • http://msdn.microsoft.com/zh-cn/wk5b13s4(vs.80).aspx中提到的方法我也试了好久
    没得到想要的效果
    所以就用另一种方法FromArgb ()吧:
    button1.BackColor = Color.FromArgb(0, 0, 0, 0);
    button1.FlatAppearance.MouseDownBackColor = Color.FromArgb(0, 0, 0, 0);
    button1.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0, 0);
    记得设置flatappearance的bodersize为0,flatstyle为flat
    测试通过.

    • 已标记为答案 chinafcl 2009年3月12日 1:12
    2009年3月11日 13:52
  • 可以了,根据你俩的提示终于可以了:
      public partial class Form1 : Form
        {
            private TransparentButton myButton = new TransparentButton();       
            public Form1()
            {
                InitializeComponent();           
                myButton.Parent = this;
               
                this.Controls.Add(myButton);                          
            }
        }
        public class TransparentButton : Button
        {
            public TransparentButton()
            {
                SetStyle(ControlStyles.SupportsTransparentBackColor|ControlStyles.UserPaint, true);
                this.BackColor = Color.Transparent; 
              this.FlatStyle = FlatStyle.Flat;
              this.FlatAppearance.BorderSize = 0;
                        
            }
        }


    谢谢!

    fang
    • 已标记为答案 chinafcl 2009年3月12日 1:12
    2009年3月12日 1:11

全部回复

  • 首先 文本不是 forecolor么?

    其次  一般要文本小时的做法是把文本修改为""
    就算首页不能显示30天内排行榜 回答总数也快接近top10了 5555
    努力奋斗 重回首页排行榜!!! 55555
    有原则的回答问题: 不懂的不去装懂,别人回答得很完整的,没有需要补充的不去蹭分。
    2009年3月11日 4:10
    版主
  •  说的不是一回事儿吧?
    努力!
    2009年3月11日 5:45
  • 是和二楼说的不是一回事,就是窗体上有一个图片,在窗体上放一个按钮,使该窗体看上去就是一幅图片,当鼠标移到该按钮上时按钮可以弹起单击可以响应事件


    fang
    2009年3月11日 6:34
  •  http://msdn.microsoft.com/zh-cn/wk5b13s4(vs.80).aspx 參考;
    確保你的控件是加入父控件中,而不是加入窗體控件中. 希望對你有幫助!
    Regards!
    每天都有进步。。
    2009年3月11日 7:00
  •  

    使控件拥有透明背景色

    1. 定位控件类的构造函数。

    2. 在构造函数中调用窗体的 SetStyle
      SetStyle(ControlStyles.SupportsTransparentBackColor, true);

    3. 在步骤 1 中添加的代码行下再添加下面的代码行。这会将控件的 BackColor 设置为 Transparentthis.BackColor = Color.Transparent;

      以上来自楼上所给MSDN上的方法.
      请问第一步:控件类的构造函数在哪个地方?小弟新手请大家多多帮忙!!
       


    fang
    2009年3月11日 10:58
  • 我刚才这样测试了,还是不行啊!
         public partial class Form1 : Form
        {
            private TransparentButton myButton = new TransparentButton();       
            public Form1()
            {
                InitializeComponent();           
                myButton.Parent = this;
               
                this.Controls.Add(myButton);                          
            }
        }
        public class TransparentButton : Button
        {
            public TransparentButton()
            {
                SetStyle(ControlStyles.SupportsTransparentBackColor|ControlStyles.UserPaint, true);
                this.BackColor = Color.Transparent;                    
            }
        }


    周雪峰
    • 已标记为答案 chinafcl 2009年3月12日 1:12
    2009年3月11日 11:21
    版主
  • http://msdn.microsoft.com/zh-cn/wk5b13s4(vs.80).aspx中提到的方法我也试了好久
    没得到想要的效果
    所以就用另一种方法FromArgb ()吧:
    button1.BackColor = Color.FromArgb(0, 0, 0, 0);
    button1.FlatAppearance.MouseDownBackColor = Color.FromArgb(0, 0, 0, 0);
    button1.FlatAppearance.MouseOverBackColor = Color.FromArgb(0, 0, 0, 0);
    记得设置flatappearance的bodersize为0,flatstyle为flat
    测试通过.

    • 已标记为答案 chinafcl 2009年3月12日 1:12
    2009年3月11日 13:52
  • 可以了,根据你俩的提示终于可以了:
      public partial class Form1 : Form
        {
            private TransparentButton myButton = new TransparentButton();       
            public Form1()
            {
                InitializeComponent();           
                myButton.Parent = this;
               
                this.Controls.Add(myButton);                          
            }
        }
        public class TransparentButton : Button
        {
            public TransparentButton()
            {
                SetStyle(ControlStyles.SupportsTransparentBackColor|ControlStyles.UserPaint, true);
                this.BackColor = Color.Transparent; 
              this.FlatStyle = FlatStyle.Flat;
              this.FlatAppearance.BorderSize = 0;
                        
            }
        }


    谢谢!

    fang
    • 已标记为答案 chinafcl 2009年3月12日 1:12
    2009年3月12日 1:11
  • 只有把按钮设置为flat才行啊!只要使用standard和System样式就不能透明啊! 
    周雪峰
    2009年3月12日 7:00
    版主