[ASP.net]用程序写的水晶按钮

转载 2004年10月25日 14:01:00

效果:

程序源代码:

 

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.Text;

namespace WindowsControlLibrary1
{
 /// <summary>
 /// UserControl1 的摘要说明。
 /// </summary>
 public class UserControl1 : Button
 {
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.Container components = null;
  private bool XiaCen=false;
  private bool mouseMove=false;
  private Color backColor;
  public UserControl1()
  {
   // 该调用是 Windows.Forms 窗体设计器所必需的。
   InitializeComponent();

   // TODO: 在 InitComponent 调用后添加任何初始化
   backColor=this.backColor;
   //this.Text=this.ShowFocusCues.ToString();
  }

  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if( components != null )
     components.Dispose();
   }
   base.Dispose( disposing );
  }

  #region 组件设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器
  /// 修改此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   //
   // UserControl1
   //
   this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.UserControl1_MouseUp);
   this.Paint += new System.Windows.Forms.PaintEventHandler(this.UserControl1_Paint);
   this.MouseEnter += new System.EventHandler(this.UserControl1_MouseEnter);
   this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.UserControl1_KeyUp);
   this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.UserControl1_KeyDown);
   this.BackColorChanged += new System.EventHandler(this.UserControl1_BackColorChanged);
   this.MouseLeave += new System.EventHandler(this.UserControl1_MouseLeave);
   this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.UserControl1_MouseDown);

  }
  #endregion

  
  
  protected GraphicsPath GetGraphicsPath(Rectangle rect)
  {
   GraphicsPath ClientPath = new System.Drawing.Drawing2D.GraphicsPath();
   if(rect.Width<=0)
   {
    rect.Width=1;
   }
   if(rect.Height<=0)
   {
    rect.Height=1;
   }
     
   ClientPath.AddArc(rect.Left,rect.Top,rect.Height,rect.Height,90f,180f);
   ClientPath.AddArc(rect.Right-rect.Height,rect.Top,rect.Height,rect.Height,270f,180f);
   ClientPath.CloseFigure();
   return ClientPath;
  }
  
  protected GraphicsPath GetGraphicsPath1(Rectangle rect)
  {
   GraphicsPath ClientPath = new System.Drawing.Drawing2D.GraphicsPath();
   if(rect.Width<=0)
   {
    rect.Width=1;
   }
   if(rect.Height<=0)
   {
    rect.Height=1;
   }
     
   ClientPath.AddArc(rect.Left,rect.Top,rect.Height,rect.Height,190f,80f);
   ClientPath.AddArc(rect.Right-rect.Height,rect.Top,rect.Height,rect.Height,270f,80f);
   ClientPath.CloseFigure();
   return ClientPath;
  }
  
  private void DrawYinYing(Graphics gr,bool xiacen)
  {
   Rectangle rect= this.ClientRectangle;
   rect.Inflate(-(rect.Width/10),-(rect.Height)/4);
   float bf1=rect.Width/100f;
   float bf2=rect.Height/100f;
   
   rect.Y=rect.Y+this.ClientRectangle.Height/4;
   if(xiacen)
   {
    rect.Y=rect.Y+4;
   }
   GraphicsPath path;
   
   for(int a=1;a<33;a++)
   {
    float bf3=bf1*a;
    float bf4=bf2*a;
    Rectangle rect1=rect;
    rect1.Inflate(-(int)bf3,-(int)bf4);
    path=GetGraphicsPath(rect1);
       
    int r=backColor.R;
    int g=backColor.G;
    int b=backColor.B;
    r=r+3*a;
    g=g+3*a;
    b=b+3*a;
    if(r>255) r=255;
    if(g>255) g=255;
    if(b>255) b=255;
    gr.FillPath(new SolidBrush(Color.FromArgb(r,g,b)),path);
   }
  }
  
  private void DrawGaoLiang(Graphics g,bool xiacen)
  {
   Rectangle rect= this.ClientRectangle;
   rect.Inflate(-4,-4);
   
   if(xiacen)
   {
    rect.Y=rect.Y+4;
   }
   GraphicsPath path=GetGraphicsPath1(rect);
   RectangleF rect1=path.GetBounds();
   rect1.Height=rect1.Height+1;
   g.FillPath(new LinearGradientBrush(rect1,
    Color.FromArgb(0xff,0xff,0xff,0xff),
    Color.FromArgb(0xff,backColor),LinearGradientMode.Vertical),path);
  }
  
  private void DrawText(Graphics g,bool xiacen)
  {
   Rectangle rect= this.ClientRectangle;
   Rectangle rect1= this.ClientRectangle;
   StringFormat stringFormat=new StringFormat();
   stringFormat.Alignment=StringAlignment.Center;
   stringFormat.LineAlignment=StringAlignment.Center;
   rect.Y=this.ClientRectangle.Height/5;
   if(xiacen)
   {
    rect.Y=rect.Y+4;
    rect1.Y=rect1.Y+4;
   }
   
   Font font=this.Font;
   
   
   if(mouseMove)
   {
    font=new Font(this.Font,FontStyle.Underline);
   }
   
   g.DrawString(this.Text,font,
    new SolidBrush(Color.FromArgb(0x66,backColor)),rect,stringFormat);
   g.DrawString(this.Text,font,new SolidBrush(this.ForeColor),rect1,stringFormat);
  }

  private void UserControl1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
  {
   if(XiaCen==false)
   {
    XiaCen=true;
    this.Refresh();
   }
  }
  
  private void UserControl1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
  {
   if(XiaCen==true)
   {
    XiaCen=false;
    this.Refresh();
   }
  }

  private void UserControl1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
  {
   
   
  }
  
  protected override void OnPaint(PaintEventArgs e)
  {
   
   base.OnPaint(e);
   e.Graphics.FillRectangle(new SolidBrush(backColor),0,0,this.Width,this.Height);
   e.Graphics.SmoothingMode=SmoothingMode.HighQuality;
   e.Graphics.TextRenderingHint=TextRenderingHint.AntiAliasGridFit;
   Rectangle rect=new Rectangle(0,0,this.Width,this.Height);
   GraphicsPath ClientPath=GetGraphicsPath(rect);
   e.Graphics.FillPath(new SolidBrush(backColor),ClientPath);
   this.Region=new System.Drawing.Region(ClientPath);
   DrawYinYing(e.Graphics,XiaCen);
   DrawGaoLiang(e.Graphics,XiaCen);
   DrawText(e.Graphics,XiaCen);
   
   if(this.Focused)
   {
    e.Graphics.DrawPath(new Pen(Color.FromArgb(0x22,0xff,0xff,0xff), 3), ClientPath); 
   }
   
  }

  
 


  private void UserControl1_BackColorChanged(object sender, System.EventArgs e)
  {
   int r=BackColor.R;
   int g=BackColor.G;
   int b=BackColor.B;
   r=r+0x22;
   g=g+0x22;
   b=b+0x22;
   if(r>255) r=255;
   if(g>255) g=255;
   if(b>255) b=255;
   backColor=Color.FromArgb(r,g,b);
  }

  private void UserControl1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
  {
   if(XiaCen==false && e.KeyCode==Keys.Space)
   {
    XiaCen=true;
    this.Refresh();
   }
  }

  private void UserControl1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
  {
   if(XiaCen==true && e.KeyCode==Keys.Space)
   {
    XiaCen=false;
    this.Refresh();
   }
  }

  private void UserControl1_MouseEnter(object sender, System.EventArgs e)
  {
   if(mouseMove==false)
   {
    mouseMove=true;
    this.Refresh();
   }
  }

  private void UserControl1_MouseLeave(object sender, System.EventArgs e)
  {
   if(mouseMove==true)
   {
    mouseMove=false;
    this.Refresh();
   }
  }
  
 }
}

用C#写水晶按钮

       UI(User Interface)编程在整个项目开发过程中是个颇为重要的环节,任何好的解决方案若没有良好的用户界面呈现给最终用户,那么就算包含了最先进的技术也不能算是好程序。UI编程体...
  • simonllf
  • simonllf
  • 2008年06月23日 23:58
  • 1507

[转]C# winForm 创建水晶风格的按钮

时下水晶风格比较流行,在天极网看到一篇制作水晶按钮控件的文章,首先启动Visual Studio 2005,新建空白解决方案,我们取名为:TestCrystalButton,然后在项目导航栏上右击...
  • freeliver54
  • freeliver54
  • 2008年09月28日 10:52
  • 1221

CSS3制作3D水晶糖果按钮

本人仿照20个漂亮 CSS3 按钮效果及优秀的制作教程中的BonBon(Candy)Button实现了其棒棒糖果按钮,如下图所示: 在线演示地址见here。使用完全使用CSS实现,无需JS。源码如下...
  • K346K346
  • K346K346
  • 2017年01月09日 13:17
  • 830

photoshop制作一个装水晶按钮的纸…

photoshop制作按钮教程英文原文地址 感谢作者:Chinthaka Sandaruwan 谢谢真功夫的翻译人员:NiaoJun 更多教程可以进入其网站观看: PSDtuts 先看看最终效果 ...
  • haibo0668
  • haibo0668
  • 2016年06月02日 13:00
  • 999

Swing自定义水晶按钮

自定义仿Win7的水晶按钮 效果图 完整工程下载http://download.csdn.net/detail/jasper_success/4488514 关键代码 public v...
  • jasper_success
  • jasper_success
  • 2012年08月09日 20:45
  • 1375

C#水晶按钮

做了一个控件,这样就可以告别图片按钮了:) 效果: 程序源代码: using System; using System.Collections; using System.ComponentModel...
  • 21aspnet
  • 21aspnet
  • 2007年03月24日 14:27
  • 3369

asp.net中输出水晶报表的实例

asp.net中将水晶报表直接输出提供下载。………………………………         Case "PDF"                    exp.ExportFormatType = Expo...
  • wangby
  • wangby
  • 2004年09月05日 09:57
  • 1176

Crystal Button水晶按钮制作工具

Crystal Button水晶按钮制作工具1)简介Crystal Button [水晶按钮]是一个快速创建出水晶般晶莹剔透的网页按钮的软件,获得多个五星软件大奖。是一个用来创建专业品质的用于网络的图...
  • black_ben
  • black_ben
  • 2006年02月13日 12:58
  • 3223

教你用photoshop制作一款可变颜色的高光质感水晶按钮

这篇教程是教大家如何用photoshop制作一款可以变换颜色的高光质感水晶按钮,制作方法主要用到了圆角矩形和图层样式。教程介绍的很详细,希望大家看完之后,不仅学会制作这款按钮的方法,而且能熟练掌握圆角...
  • yuanyuan_186
  • yuanyuan_186
  • 2016年05月06日 16:53
  • 464

手把手教你学会asp.net水晶报表

 本文详细介绍ASP.NET中利用水晶报表创建图表   在很多的应用程序中,报表是不可缺少的,一张好的报表能直观地让人把握数据的情况,方便决策。在这篇文章中,我们将以一个三层结构的asp.net程序为...
  • chuxue1342
  • chuxue1342
  • 2007年12月14日 15:36
  • 11115
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[ASP.net]用程序写的水晶按钮
举报原因:
原因补充:

(最多只允许输入30个字)