精华内容
参与话题
问答
  • 在各类有关.Net的技术论坛上常有人问如何实现透明的图像或图形效果,答案很简单,就是Alpha Blending技术。Alpha Blending技术是一个混合各种颜色值并产生透明效果的过程。具体的实现原理也很简单:在GDI+中,任何一...

    在各类有关.Net的技术论坛上常有人问如何实现透明的图像或图形效果,答案很简单,就是Alpha Blending技术。Alpha Blending技术是一个混合各种颜色值并产生透明效果的过程。具体的实现原理也很简单:在GDI+中,任何一种颜色由四种成分组成――Alpha,Red,Green和Blue。其中的Alpha成分则代表了一种颜色的透明程度,它的值在0到255之间变化。不言而喻,0代表完全透明而255则表示完全不透明。因此,你只要用透明效果创建一种颜色并用该颜色来画图像就可以完成图像的透明处理了。

    按钮透明:设置按钮的backcolor为0,0,0,0 的数字即可,同时设置FlatApperance的BorderSize为0,FlatStyle为Flat,这样该按钮就完全透明了,此种效果常用在用背景做皮肤,然后在相应位置放一个按钮,控制按钮事件,但不想让用户看到按钮的情况;

    C# 窗体关闭时产生透明渐变:

    前几天无意中听同学说想要弄个窗体渐变的,后来自己上网搜索了一下,发现些方法,自己试了一下是成功的,但是还是有些问题,郁闷。。。以下列出几种我弄的方法:
    ①     新键窗体,窗体里加个按钮,双击按钮进入事件编写代码
                while (this.Opacity > 0)
                {
                    this.Opacity -= 0.02;
                    Thread.Sleep(20);
                }
                Application.Exit();
    程序运行后点击该按钮关闭的时候整个窗体是先变成黑色,然后透明度再慢慢变小,变为0的时候程序再退出的,理论上来说我这个思路应该是正确的,可是我就不知道是怎么回事了?
    ②往窗体里加入Timer控件,Interval设置为20,控件事件编写代码:
                if (this.Opacity > 0)
                {
                    this.Opacity -= 0.02;
                }
                else {
                    Application.Exit();
                }
    然后在按钮的点击事件中写上  timer1.Start(); 就行了,经测试,这种方法是可以的,窗体是慢慢变透明而后又关闭的。。。
        可是随后的问题又来了,我现在是想当我点击窗体右上角的关闭按钮时,窗体渐变关闭,我在窗体的FormClosing事件中输入timer1.Start();,测试,结果是当我点击窗体右上角的关闭按钮时,程序是直接退出了,并没有渐变消失,郁闷,搞不懂是怎么回事哦,而后上网找了好久,找到个解决方法,FormClosing事件中输入e.Cancel = true;   timer1.Start();  测试,结果,点击关闭后,窗体是能渐变消失了,可是当透明度到0了以后,并没有关闭,任务栏上的图标还在,任务管理器里也有相应的进程。

    问题已经解决了
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                timer1.Start();
                e.Cancel = false;
               
            }
    两步顺序倒了
    解释下 在窗体关闭时事件 调用线程逐减透明度 然后 Cancel=false;是让窗体关闭不取消
    楼主理解错误了 true是取消 所以窗体不会关闭

    Cancel 一般是关闭窗体时写
    例子:
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                DialogResult dr=MessageBox.Show("是否关闭本窗体","提示",MessageBoxButtons.YesNo);
                if (DialogResult.No == dr)//如果点否按钮
                {
                    e.Cancel = true;//取消关闭
                }
            }

    展开全文
  • 我画了一个圆形按钮,可怎么让周围透明? Graphics g = e.Graphics; g.Clear(Color.Transparent); 这个不行啊,周围成黑色了。 g.Clear(Color.Black );设成黑色也是黑色 设置region不好,因为会出现锯齿,所以...
  • 新手不知道怎么写,当按钮按下时,按钮的Image(script)中的color.a从255缓慢降到0,形成渐隐的效果.百度了一下这样写只会瞬间消失,其中B1是按钮,求帮助 Color color1 = B1.gameObject.GetComponent().color; ...
  • C# .NET如何定义图片按钮

    千次阅读 2017-10-17 21:50:52
    先添加一个按钮,然后修改Image或者BackgroundImage显然不好,我想要按钮透明,就不要放在按钮的方框里,而且鼠标滑过和鼠标点击最好都是我自定义。  我们拉一个PictureBox,然后修改BackgroundImage和Size...
    先添加一个按钮,然后修改Image或者BackgroundImage显然不好,我想要按钮透明,就不要放在按钮的方框里,而且鼠标滑过和鼠标点击最好都是我自定义。
    

     

    我们拉一个PictureBox,然后修改BackgroundImage和Size属性,就能满足要求了。(把Size做成跟图像一样大即可)

     

    在随后的事件中,虽然这是一个PictureBox,但是也有按钮一样的方法,比如click,mousedown,mouseup等等。我们只要在事件列表中分别添加需要的事件名称即可。

     

    如果是我想要当鼠标移入的时候换一个背景图片呢?首先推荐把图片文件夹放到Arrow文件夹里

     

    这样两行代码,就可以实现按下和松开的时候切换PictureBox的图片更换了

     

    但是这样做出来的按钮有一个问题,就是实际的按钮边界还是长方体的PictureBox,我鼠标没有点击箭头按钮,点击到这个PictureBox里面还是会触发Mousedown事件。网友说在Winform中需要改写button,比较复杂,但是WPF则可以轻松实现,这里不再做深入探讨。

    展开全文
  • WinForm单窗体应用如何模块化 需求及效果 又来一波 C# GDI自定义控件show 。这个控件已经使用几年了,最近找出来重构一下。原来是没有边框的,那么导致导航的功能不是很突出。本来想加个效果:在执行单击时显示...

    技术看点

    • WinForm自定义控件的使用
    • WinForm单窗体应用如何模块化

    需求及效果

    又来一波 C# GDI自定义控件show 。这个控件已经使用几年了,最近找出来重构一下。原来是没有边框的,那么导致导航的功能不是很突出。本来想加个效果:在执行单击时显示Loading动画,在执行完单击事件后恢复原样。这就是网页里见到的局部刷新,Ajax常用的场景。无奈要下班了,还没弄出来。需求来自几年前一个智能储物柜项目,人机界面有个美工设计好的效果图,为了省事和通用,需要一个透明的按钮来实现导航的任务。就是控件只是设计时可见,运行时不可见。

     

     

    关键点说明

    1)、GraphicsPath实现矩形的圆角羽化处理

     

     using (GraphicsPath path = new GraphicsPath())
                {
                    #region 羽化,圆角处理
                    path.StartFigure();
                    path.AddArc(new Rectangle(new Point(rect.X, rect.Y), new Size(2 * Radius, 2 * Radius)), 180, 90);
                    path.AddLine(new Point(rect.X + Radius, rect.Y), new Point(rect.Right - Radius, rect.Y));
                    path.AddArc(new Rectangle(new Point(rect.Right - 2 * Radius, rect.Y), new Size(2 * Radius, 2 * Radius)), 270, 90);
                    path.AddLine(new Point(rect.Right, rect.Y + Radius), new Point(rect.Right, rect.Bottom - Radius));
                    path.AddArc(new Rectangle(new Point(rect.Right - 2 * Radius, rect.Bottom - 2 * Radius), new Size(2 * Radius, 2 * Radius)), 0, 90);
                    path.AddLine(new Point(rect.Right - Radius, rect.Bottom), new Point(rect.X + Radius, rect.Bottom));
                    path.AddArc(new Rectangle(new Point(rect.X, rect.Bottom - 2 * Radius), new Size(2 * Radius, 2 * Radius)), 90, 90);
                    path.AddLine(new Point(rect.X, rect.Bottom - Radius), new Point(rect.X, rect.Y + Radius));
                    path.CloseFigure();
                    #endregion 
                    

    要点就是画几段弧线和矩形连接起来。透明就是用了Color.FromArgb加上透明度,然后填充GraphicsPath形成透明区域。

    g.FillPath(new SolidBrush(Color.FromArgb(153, BackColor)), path);

    2)、单窗体应用如何模块化 

    窗体只有一个,但操作界面好多个,由于是无人值守的应用。那么老是切换窗体操作是非常不方便的。工作区域是一个容器Panel,把每个操作界面定义成一个Panel作为只容器。

     public partial class DepositBizPanel : UserControl
        {
            private BackgroundStyle backgroundStyle = BackgroundStyle.Green;
            /// <summary>
            /// 主题风格
            /// </summary>
            public BackgroundStyle BackgroundStyle
            {
                get { return backgroundStyle; }
                set
                {
                    backgroundStyle = value;
                    switch (value)
                    {
                        case GreenlandExpressBox.BackgroundStyle.Blue:
                            BackgroundImage = Properties.Resources.jbblue;
                            break;
                        case GreenlandExpressBox.BackgroundStyle.Orange:
                            BackgroundImage = Properties.Resources.jborange;
                            break;
                        case GreenlandExpressBox.BackgroundStyle.Green:
                            BackgroundImage = Properties.Resources.jbgreen;
                            break;
                    }
                    Invalidate();
                }
            }
    
            public Panel ParentPanel
            {
                get;
                set;
            }
    
            public Bitmap QR_Barcode
            {
                get { return (Bitmap)pbxBarcode.Image; }
                set { pbxBarcode.Image = value; }
            }
    
            public DialogResult PanelDiagResult
            {
                get;
                set;
            }
    
            public DepositBizPanel(Panel parent, Bitmap barcode, BackgroundStyle style)
            {
                InitializeComponent();
                DoubleBuffered = true;
                ParentPanel = parent;
                QR_Barcode = barcode;
                BackgroundStyle = style;
            }       
    
            private void btnback_Click(object sender, EventArgs e)
            {
                foreach (Control panel in ParentPanel.Controls)
                {
                    if (panel is DepositBizPanel)
                    {
                        ParentPanel.Controls.Remove(panel);
                        PanelDiagResult = DialogResult.Cancel;
                        break;
                    }
                }
            }
    
            private void btnprocessnext_Click(object sender, EventArgs e)
            {
                foreach (Control panel in ParentPanel.Controls)
                {
                    if (panel is DepositBizPanel)
                    {
                        ParentPanel.Controls.Remove(panel);
                        PanelDiagResult = DialogResult.OK;
                        break;
                    }
                }
            }
        }
    人机操作界面例子

     

    透明按钮自定义控件全部代码

    自定义按钮:

    /// <summary>
        /// Cool透明自定义按钮
        /// </summary>
        public partial class CoolTransparentButton : UserControl
        {
            private Size iconSize = new Size(32, 32);
            public Size IconSize
            {
                get
                {
                    return iconSize;
                }
                set
                {
                    iconSize = value;
                    Invalidate();
                }
            }
            private string _ButtonText;
            public string ButtonText
            {
                get { return _ButtonText; }
                set
                {
                    _ButtonText = value;
                    Invalidate();
                }
            }
            protected Image _IconImage;
            public Image IconImage
            {
                get
                {
                    return _IconImage;
                }
                set
                {
                    _IconImage = value;
                    Invalidate();
                }
            }
            private bool _FocseActived = false;
            private Color _BorderColor = Color.White;
            public Color BorderColor
            {
                get
                {
                    return _BorderColor;
                }
                set
                {
                    _BorderColor = value;
                    Invalidate();
                }
            }
            private int _Radius = 12;
            public int Radius
            {
                get
                {
                    return _Radius;
                }
                set
                {
                    _Radius = value;
                    Invalidate();
                }
            }
            private bool ifDrawBorderWhenLostFocse = true;
            /// <summary>
            /// 失去焦点是否画边框
            /// </summary>
            public bool IfDrawBorderWhenLostFocse
            {
                get
                {
                    return ifDrawBorderWhenLostFocse;
                }
                set
                {
                    ifDrawBorderWhenLostFocse = value;
                    Invalidate();
                }
            }
            /// <summary>
            /// 是否处于激活状态(焦点)
            /// </summary>
            public bool FocseActived
            {
                get { return _FocseActived; }
                set
                {
                    _FocseActived = value;
                    Invalidate();
                }
            }          
            public CoolTransparentButton()
            {
                DoubleBuffered = true;
                BackColor = Color.Transparent;
                SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
                SetStyle(ControlStyles.Opaque, false);
                UpdateStyles(); 
            }
            protected override void OnPaint(PaintEventArgs e)
            {
                var rect = ClientRectangle;
                rect.Inflate(-1, -1);
                Graphics g = e.Graphics;
                g.SmoothingMode = SmoothingMode.HighQuality;
                using (GraphicsPath path = new GraphicsPath())
                {
                    #region 羽化,圆角处理
                    path.StartFigure();
                    path.AddArc(new Rectangle(new Point(rect.X, rect.Y), new Size(2 * Radius, 2 * Radius)), 180, 90);
                    path.AddLine(new Point(rect.X + Radius, rect.Y), new Point(rect.Right - Radius, rect.Y));
                    path.AddArc(new Rectangle(new Point(rect.Right - 2 * Radius, rect.Y), new Size(2 * Radius, 2 * Radius)), 270, 90);
                    path.AddLine(new Point(rect.Right, rect.Y + Radius), new Point(rect.Right, rect.Bottom - Radius));
                    path.AddArc(new Rectangle(new Point(rect.Right - 2 * Radius, rect.Bottom - 2 * Radius), new Size(2 * Radius, 2 * Radius)), 0, 90);
                    path.AddLine(new Point(rect.Right - Radius, rect.Bottom), new Point(rect.X + Radius, rect.Bottom));
                    path.AddArc(new Rectangle(new Point(rect.X, rect.Bottom - 2 * Radius), new Size(2 * Radius, 2 * Radius)), 90, 90);
                    path.AddLine(new Point(rect.X, rect.Bottom - Radius), new Point(rect.X, rect.Y + Radius));
                    path.CloseFigure();
                    #endregion 
                    if (!FocseActived)
                    {
                        if (ifDrawBorderWhenLostFocse)
                            g.DrawPath(new Pen(Color.Gray, 1), path);
                        g.FillPath(new SolidBrush(Color.FromArgb(66, BackColor)), path);
                    }
                    else
                    {
                        g.DrawPath(new Pen(BorderColor, 1), path);
                        rect.Inflate(-1, -1);
                        g.FillPath(new SolidBrush(Color.FromArgb(153, BackColor)), path);
                    }
                    #region 画文本
                    g.SmoothingMode = SmoothingMode.AntiAlias;
                    if (IconImage != null)
                    {
                        Rectangle rc = new Rectangle((Width - 32) / 2, 16, IconSize.Width, IconSize.Height);
                        g.DrawImage(IconImage, rc);
                    }
                    if (!string.IsNullOrEmpty(ButtonText))
                    {
                        using (StringFormat f = new StringFormat())
                        {
                            Rectangle rectTxt = new Rectangle(0, (Height - 18) / 2, Width, 36);
                            f.Alignment = StringAlignment.Center;// 水平居中对齐 
                            f.LineAlignment = StringAlignment.Center;   // 垂直居中对齐 
                            f.FormatFlags = StringFormatFlags.NoWrap;// 设置为单行文本 
                            SolidBrush fb = new SolidBrush(this.ForeColor); // 绘制文本 
                            e.Graphics.DrawString(ButtonText, new Font("微软雅黑", 16F, FontStyle.Bold), fb, rectTxt, f);
                        }
                    }
                    #endregion 
                }
            }
            protected override void OnMouseHover(EventArgs e)
            {
                FocseActived = true;
            }
            protected override void OnMouseLeave(EventArgs e)
            {
                FocseActived = false;
            }
            protected override void OnEnter(EventArgs e)
            {
                FocseActived = true;
            }
            protected override void OnLeave(EventArgs e)
            {
                FocseActived = false;
            } 
        }

    注释不是很多,如有需要拿走不谢.

    展开全文
  • 按钮那些都是黑色,但是按钮边框的的白边怎么都去不了。(不是图片问题,图片背景是透明的。)百度到解决方案是"borderStyle 设置为:none borderColor 设置为:transparent(透明)"其中找不到borderstlye这个选项,...
  • 如何C#中画半透明的圆?

    千次阅读 2009-09-04 00:20:00
    给你代码你看一下效果://在Winform窗体上放一个按钮,以下为按钮单击事件代码private void button1_Click(object sender, EventArgs e) { System.Drawing.Graphics g = this.CreateGraphics(); g.Smoo
    给你代码你看一下效果:
    //在Winform窗体上放一个按钮,以下为按钮单击事件代码
    private void button1_Click(object sender, EventArgs e)
            {
                System.Drawing.Graphics g = this.CreateGraphics();
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    
                System.Drawing.Color Mycolor = System.Drawing.Color.FromArgb(128, Color.Yellow);//说明:1-(128/255)=1-0.5=0.5 透明度为0.5,即50%
                System.Drawing.SolidBrush sb1 = new System.Drawing.SolidBrush(Mycolor);
    
                g.FillRectangle(Brushes.Tomato, 0, 50,250 ,50); //给窗体填上颜色以增强比较效果
                g.FillEllipse(sb1, 20, 20, 100, 100); //半透明效果
                g.FillEllipse(Brushes.Yellow, 120, 20, 100, 100); //实色效果
    
                sb1.Dispose();
    
            } 
    展开全文
  • 在各类有关.Net的技术论坛上常有人问如何实现透明的图像或图形效果,答案很简单,就是Alpha Blending技术。Alpha Blending技术是一个混合各种颜色值并产生透明效果的过程。具体的实现原理也很简单:在GDI+中,任何一...
  • C#编程经验技巧宝典

    千次下载 热门讨论 2008-06-01 08:59:33
    102 <br>0162 如何实现C#中用键完成TAB的功能 102 <br>0163 如何限制文本框密码输入长度 102 <br>0164 数据输入为空提示 103 <br>0165 如何设置文本框光标到末尾 103 <br>0166 输入法调整...
  • C#全能速查宝典

    热门讨论 2014-04-26 16:16:27
    C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...
  • 主要内容有C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows常用控件的使用、...
  • 适用于C#初学者的几个小程序,可以加深对这门语言的理解 包括有以下内容: 1.C#获取当前程序所在的文件夹.rar 2.C#界面皮肤(带例子).rar 3.C#如何使用托盘控件的实例源码.rar 4.C#文本加密解密算法示例源代码.rar 5....
  • C#程序开发范例宝典

    2010-12-15 20:05:16
    实例029 半透明渐显窗体...... 31 实例030 窗口颜色的渐变...... 32 1.9 窗体动画...... 33 实例031 窗体中的滚动字幕...... 33 实例032 动画显示窗体...... 34 实例033 制作闪烁的窗体...... 35 实例...
  • 实例44 如何设置窗体的透明度 实例45 如何设置窗体启动位置 实例46 如何设置窗体最前端显示 实例47 如何实现精灵提示 实例48 如何实现打印预览 实例49 如何实现剪贴板循环 实例50 如何实现菜单历史列表 实例...
  • C#开发典型模块大全

    2014-03-12 18:11:22
    10.2.4 通过控制窗体透明度实现日历透明显示效果 231 10.2.5 拖动无标题栏窗体 232 10.2.6 将窗体的关闭位置写入到注册表中 232 10.2.7 将程序图标写入到托盘 232 10.3 设计过程 233 10.3.1 桌面精灵模块...
  • C#程序开发范例宝典(第2版).part13

    热门讨论 2012-11-12 20:17:14
    实例029 半透明渐显窗体 29 实例030 窗口颜色的渐变 30 1.9 窗体动画 31 实例031 窗体中的滚动字幕 31 实例032 动画显示窗体 32 实例033 制作闪烁的窗体 33 实例034 实现任务栏通知窗口 34 实例035 动画形式...
  • C#.net_经典编程例子400个

    热门讨论 2013-05-17 09:25:30
    323 7.11 系统隐藏 324 实例233 隐藏、显示任务栏 324 实例234 隐藏、显示开始按钮 325 实例235 查看当前系统版本 326 实例236 使桌面图标文字透明 328 实例237 检索系统中正在运行的...
  • 预定义类型 下表列出了预定义类型,并说明如何使用。 类型 object 说明 所有其他类型的最终 基类型 字符串类型; 字符串是 Unicode 字符序列 8 位有符号整型 16 位有符号整型 32 位有符号整型 64 位有符号整型 示例...
  • 3.1.3 用C#如何创建对象 27 3.1.4 什么是面向对象编程 27 3.2 面向对象的技术 28 3.2.1 接口 28 3.2.2 用C#如何创建接口 28 3.2.3 继承 29 3.2.4 用C#如何实现继承 29 3.2.5 多态 30 3.2.6 用C#如何实现多态 31 3.3 ...
  • 实例029 半透明渐显窗体 29 实例030 窗口颜色的渐变 30 1.9 窗体动画 31 实例031 窗体中的滚动字幕 31 实例032 动画显示窗体 32 实例033 制作闪烁的窗体 33 实例034 实现任务栏通知窗口 34 ...
  • 实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例233 ...
  • 实例019 以图形按钮显示的界面 20 实例020 以树形显示的程序界面 21 实例021 动态按钮的窗体界面 22 1.6 特殊形状的窗体 24 实例022 非矩形窗体 24 实例023 建立字体形状窗体 25 实例024 控件随窗体...
  • 实例029 半透明渐显窗体 29 实例030 窗口颜色的渐变 30 1.9 窗体动画 31 实例031 窗体中的滚动字幕 31 实例032 动画显示窗体 32 实例033 制作闪烁的窗体 33 实例034 实现任务栏通知窗口 34 实例035 动画形式...
  • 实例029 半透明渐显窗体 29 实例030 窗口颜色的渐变 30 1.9 窗体动画 31 实例031 窗体中的滚动字幕 31 实例032 动画显示窗体 32 实例033 制作闪烁的窗体 33 实例034 实现任务栏通知窗口 34 实例035 动画形式...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    实例029 半透明渐显窗体 29 实例030 窗口颜色的渐变 30 1.9 窗体动画 31 实例031 窗体中的滚动字幕 31 实例032 动画显示窗体 32 实例033 制作闪烁的窗体 33 实例034 实现任务栏通知窗口 34 实例035 动画形式...
  • 实例182 制作半透明渐显窗体 235 实例183 使窗体背景色渐变 236 实例184 随机更换主界面背景 237 实例185 磁性窗体的设计 238 实例186 制作鼠标穿透窗体 246 实例187 窗体换肤程序 247 8.4 窗体动画 250 实例188 ...

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

如何c#按钮透明

c# 订阅