解决方案 »

  1.   

    button.bringtofront ??没理解你的需求
      

  2.   

    谢谢回复,就是给整个窗口设置张图片作为背景,这张图片上有按钮这些,我在按钮这个地方画个picturebox,点击picturebox就相当于点击了这个按钮事件,这个好处就是不用我重绘界面了,用背景就可以了,有个问题就是,我点击这个按钮的时候,图片是没反应的,所以我想做个控件,设置其半透明,点击这个picturebox的时候使按钮看起来有反应,不知道我说明白了没有
      

  3.   

    可以重绘Panel,参考下这个代码
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Windows.Forms;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;namespace Monitor
    {
        public partial class PanelEx : System.Windows.Forms.Panel
        {
            private string m_strInfo;
            public void ShowInfo(string strInfo)
            {
                m_strInfo = strInfo;
                this.Invalidate();
            }        private void PanelEx_MouseEnter(object sender, EventArgs e)
            {
                this.Visible = true;
            }        public bool drag = false;
            public bool enab = false;
            private Color fillColor = Color.White;
            private int opacity = 50;
            private int alpha;        public TransparentInfo()
            {
                SetStyle(ControlStyles.SupportsTransparentBackColor, true);
                SetStyle(ControlStyles.Opaque, true);
                this.BackColor = Color.Transparent;
            }        public Color FillColor
            {
                get
                {
                    return this.fillColor;
                }
                set
                {
                    this.fillColor = value;
                    if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
                }
            }        public int Opacity
            {
                get
                {
                    if (opacity > 100) { opacity = 100; }
                    else if (opacity < 1) { opacity = 1; }
                    return this.opacity;
                }
                set
                {
                    this.opacity = value;
                    if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
                }
            }        //protected override CreateParams CreateParams
            //{
            //    get
            //    {
            //        CreateParams cp = base.CreateParams;
            //        cp.ExStyle |= 0x20;
            //        return cp;
            //    }
            //}
    石头  16:55:08
            protected override void OnPaint(PaintEventArgs e)
            {
                Graphics g = e.Graphics;
                Rectangle bounds = new Rectangle(0, 0, this.Width - 1, this.Height - 1);            Color frmColor = this.Parent.BackColor;
                Brush brushColor;
                Brush bckColor;            alpha = (opacity * 255) / 100;            if (drag)
                {
                    Color dragFillColor;
                    Color dragBckColor;                if (BackColor != Color.Transparent)
                    {
                        int Rb = BackColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
                        int Gb = BackColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
                        int Bb = BackColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
                        dragBckColor = Color.FromArgb(Rb, Gb, Bb);
                    }
                    else dragBckColor = frmColor;                if (fillColor != Color.Transparent)
                    {
                        int Rf = fillColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
                        int Gf = fillColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
                        int Bf = fillColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
                        dragFillColor = Color.FromArgb(Rf, Gf, Bf);
                    }
                    else dragFillColor = dragBckColor;                alpha = 255;
                    brushColor = new SolidBrush(Color.FromArgb(alpha, dragFillColor));
                    bckColor = new SolidBrush(Color.FromArgb(alpha, dragBckColor));
                }
                else
                {
                    Color color = fillColor;
                    brushColor = new SolidBrush(Color.FromArgb(alpha, color));
                    bckColor = new SolidBrush(Color.FromArgb(alpha, this.BackColor));
                }            if (this.BackColor != Color.Transparent | drag)
                {
                    g.FillRectangle(bckColor, bounds);
                }            if(m_strInfo!=null && m_strInfo.Length>0)
                {
                    g.DrawString(m_strInfo, this.Font, new SolidBrush(this.ForeColor), 10, 10);
                }            brushColor.Dispose();
                bckColor.Dispose();
                g.Dispose();            base.OnPaint(e);
            }        protected override void OnBackColorChanged(EventArgs e)
            {
                if (this.Parent != null) Parent.Invalidate(this.Bounds, true);
                base.OnBackColorChanged(e);
            }        protected override void OnParentBackColorChanged(EventArgs e)
            {
                this.Invalidate();
                base.OnParentBackColorChanged(e);
            }
        }
    }
      

  4.   

    上面的
    public TransparentInfo()
    改成
    public PanelEx()
      

  5.   

    panel1.BackColor = Color.FromArgb(80, 255, 0, 0);前面的80设置255为不透明。
    ARGB  后面3位是rgb值不谢
      

  6.   

    picturebox 需要放在容器控件里面才能实现半透明。  比如 picturebox 背景是 0,0,0
    把他放在  背景是  80,0,0,0  的panel里 就可以实现半透明。其它控件直接设置背景色即可