码迷,mamicode.com
首页 > 其他好文 > 详细

自定义控件透明

时间:2018-11-21 15:42:26      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:csharp   代码   erp   实现   surf   sources   send   order   部分   

  最近要用到一个日期控件, 自带控件不符合要求,网上找了也没想要的。……于是乎有了该文章……

自拍一张:

技术分享图片

 

如上图,新建usercontrol,添加textbox、picturebox、monthcalendar。(图 上的小正方形就是picturebox可以根据图标自己定义)

因为想要文本框的大小做特定修改, 就在textbox外面套了一层panel 给了个border 充当textbox的边框。

我的目的就是把textbox 和 monthcalendar没有覆盖的部分透明,代码如下:

public partial class IrisCalendar : UserControl
    {
        public IrisCalendar()
        {
            InitializeComponent();
            //背景透明
            Image = Properties.Resources.calendar; //一张跟usercontrol等大小的透明图片
            SetStyle(ControlStyles.SupportsTransparentBackColor
          | ControlStyles.UserPaint
          | ControlStyles.AllPaintingInWmPaint
          | ControlStyles.Opaque, true);
            BackColor = Color.Transparent;
        }

        #region 背景透明
        protected override void OnLocationChanged(EventArgs e)
        {
            // pick up the container‘s surface again. 
            Visible = false;
            Visible = true;
        }
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT 
                return cp;
            }
        }
        private Image image;
        public Image Image
        {
            get
            {
                return image;
            }
            set
            {
                image = value;
                Size = image.Size;
            }
        }
        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
            pe.Graphics.DrawImage(image, 80, 0);
        }
        #endregion

        //点击图标
        private void picCalendar_Click(object sender, EventArgs e)
        {
            CalendarVisible();
        }

        //隐藏or显示控件
        private void CalendarVisible()
        {
            if (this.dateCalendar.Visible)
            {
                this.dateCalendar.Visible = false;
                this.Width = 140;
                this.Height = 30;
                this.image = Properties.Resources.calendar_little;
            }
            else
            {
                this.dateCalendar.Visible = true;
                this.Width = 220;
                this.Height = 210;
            }
        }
    }

  透明的目的实现了, 但是出现了其他的问题。 比如:在monthcalendar控件隐藏的时候, 会导致这一块区域还是自定义控件的区域。

  如果你的目的只是透明, 那就够了。如果不是的话, 未完待续(也希望有人能提供更好的,感激不尽)……

自定义控件透明

标签:csharp   代码   erp   实现   surf   sources   send   order   部分   

原文地址:https://www.cnblogs.com/tony-brook/p/9994350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!