首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

请问一下, 怎样让用户自定义控件实现背景透明.特别是当多个控件重叠时

2013-07-11 
请教一下, 怎样让用户自定义控件实现背景透明.特别是当多个控件重叠时.现在运行时的效果下如图:请问, 怎样

请教一下, 怎样让用户自定义控件实现背景透明.特别是当多个控件重叠时.
现在运行时的效果下如图:
请问一下, 怎样让用户自定义控件实现背景透明.特别是当多个控件重叠时

请问, 怎样让控件白色的部份变为透明呢? 


        #region 透明
        public bool drag = false;
        public bool enab = false;
        private Color fillColor = Color.White;
        private int opacity = 100;

        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;
            }
        }
        #endregion



使用以上代码以后, 控件的空白部分可以透明, 但是对控件进行拖动以后, 透明的部分又回变回白色, 向高手请教.谢谢.
[解决办法]

没弄过。。看这个对你有帮助不。。

[解决办法]

我看也像。。。好像就是多了个对OnPaint的重写。。
[解决办法]
学习中
[解决办法]
如果你用户控件中是一副位图的话,你可以采用窗口区域对象的方式,这样可以保证实现任何不规则的透明效果
另外透明这种方式,当控件多的时候绘制会很闪耀的。

下面是取得位图区域的代码,你可以根据位图在控件中的位置换算一下,否则坐标就是0,0开始了。


/// <summary>
        /// 用指定的屏蔽颜色返回指定位图的GraphicsPath对象,该方法不能返回JPG图象的区域!
        /// </summary>
        /// <param name="Bmp">指定的位图</param>
        /// <param name="TransparentColor">图象中要屏蔽的颜色</param>
        /// <returns>Returns GraphicsPath</returns>
        //如果要取得Region对象: Region region = new Region(GetBitmapRegion(...)返回值)
        //this.Region = region 即可将窗口区域转换该图形样式(在Form_Load(...)中)


        public static GraphicsPath GetBitmapPath(Bitmap Bmp)
        {
            if (Bmp == null) return null;

            GraphicsPath Path = new GraphicsPath();//创建图形路径
            int x = 0, y = 0;
            Rectangle Rect;

            for (x = 0; x <= Bmp.Width - 1; x++)      //x方向
            {
                for (y = 0; y <= Bmp.Height - 1; y++) //y方向
                {                    
                    Rect = new Rectangle(x, y, 1, 1);//创建一个单像素矩型区域,非屏蔽色点的坐标
                    Path.AddRectangle(Rect);                    
                }
            }
            return Path;
        }        


[解决办法]
Label 可以指定ImageList,而ImageList可以将某种颜色处理掉,比如你的例子中的白色

可以参考
http://topic.csdn.net/u/20110507/12/b25a1f90-c250-4765-ab19-07b51743fe45.html
[解决办法]
系统自带的所有透明方式,都无法让你在两个或多个子控件之间呈现透明效果。。。。

我也疑惑白色的部分是什么?是用户控件的背景吗?


[解决办法]
帮楼主顶一下
[解决办法]
帮LZ顶下,新手多给点分哈 LZ
[解决办法]

引用:
帮LZ顶下,新手多给点分哈 LZ

++
[解决办法]
Color.Transparent

[解决办法]
mark

热点排行