¿Cómo cambiar la forma del botón en C#?
ImageButton es un control en asp.net. Si es winform, puede usar botones normales para configurar la imagen de fondo y el formato de visualización del botón. También puede utilizar el control imagebox.
usando System;
usando System.Collections;
usando System.ComponentModel;
usando System.Drawing;
usando System.Data;
usando System.Windows.Forms;
usando System.Drawing.Drawing2D;
usando System.Drawing.Imaging;
usando System.Text;
botón de cristal personalizado del espacio de nombres
{
/// lt; resumengt;
/// Descripción resumida de UserControl1.
/// lt;/summarygt;
clase pública TestButton: Botón
{
/// lt;summarygt;
/// Variables de diseñador requeridas.
///lt;/summarygt;
private System.ComponentModel.Container componentes = null;
private enum MouseActionType//Definir el tipo de clic del mouse
{
Ninguno,
Colocar el cursor,
Hacer clic
}
privado MouseActionType mouseAction;
atributos de imagen privados imgAttr = new ImageAttributes();
botón de mapa de bits privado
botón de rectángulo privado
botón de prueba público ( )
{
// Esta llamada es requerida por el diseñador de formularios de Windows.Forms.
InitializeComponent();
// TODO: Agregar cualquier inicialización después de la llamada de InitComponent
mouseAction = MouseActionType.None; Aplique tecnología de doble buffer para evitar que la pantalla parpadee
this.SetStyle(ControlStyles.AllPaintingInWmPaint |
ControlStyles.DoubleBuffer |
ControlStyles.UserPaint, true);
//Modifica la fuente predeterminada, el color de fondo y el tamaño
this.Font = new Font("宋体", 12, FontStyle.Bold);
this .BackColor = Color.DarkTurquoise;
this.Size = new Size(100, 40);
}
/// resumengt;
p>/// Limpia todos los recursos en uso.
/// lt;/summarygt;
anulación protegida void Dispose( bool disposing)
{
if( disposing)
{
if( componentes != null )
componentes.Dispose();
}
base .Dispose( disposing);
}
#código de región generado por el diseñador de componentes
/// lt; // El diseñador admite el método requerido; no utilice el editor de código
/// para modificar el contenido de este método.
/// lt;/summarygt;
private void InitializeComponent()
{
componentes = new System.ComponentModel.Container ();
}
#endregion
ruta de gráficos privada GetGraphicsPath(Rectangle rc, int r)
{
int x = rc.X, y = rc.Y, w = rc.Width, h = rc.Height;
ruta GraphicsPath = nueva ruta GraphicsPath(); .AddArc(x, y, r, r, 180, 90); //La elipse en la esquina superior izquierda
ruta.AddArc(x w - r, y, r, r, 270, 90) ; // La elipse en la esquina superior derecha
path.AddArc(x w - r, y h - r, r, r, 0, 90); //La elipse en la esquina inferior izquierda
path.AddArc(x , y h - r, r, r, 90, 90); //La elipse en la esquina inferior derecha
path.CloseFigure();
ruta de retorno;
}
anulación protegida void OnPaint(PaintEventArgs e)
{
Gráficos g = e.Graphics;
//g.Clear (Color.White);
g.Clear(SystemColors.Control); //Borrar el color tridimensional del lienzo
<); p> Color clr = this.BackColor;int shadowOffset = 8;
int btnOffset = 0
switch (mouseAction)
{
caso MouseActionType.Click:
p>
sombraOffset = 4
clr = Color.DeepSkyBlue
; btnOffset = 2;
descanso;
caso MouseActionType.Hover:
clr = Color.DeepSkyBlue
descanso; >
}
g.SmoothingMode = SmoothingMode.AntiAlias;
///
/// Crea el gráfico del propio botón
///
Rectángulo rc = nuevo R
ectangle(btnOffset, btnOffset, this.ClientSize.Width - 8 - btnOffset, this.ClientSize.Height - 8 - btnOffset);
GraphicsPath ruta1 = this.GetGraphicsPath(rc, 20);
//Un punto inicial y un punto final se rellenan con el color del degradado
LinearGradientBrush br1 = new LinearGradientBrush(new Point(0, 0), new Point(0, rc.Height 6), clr , Color.White);
///
/// Crear sombra de botón
///
Rectángulo rc2 = rc ;
rc2.Offset(shadowOffset, shadowOffset);
GraphicsPath ruta2 = this.GetGraphicsPath(rc2, 20);
PathGradientBrush br2 = new PathGradientBrush( ruta2 );
br2.CenterColor = Color.Black;
br2.SurroundColors = new Color[] {SystemColors.Control};
//Para ser Para ser más realista, establecemos el color final del degradado en el color de primer plano del formulario, que se puede ajustar adecuadamente según el color de primer plano de la ventana
///
/ // Crea un degradado blanco en la parte superior del botón
///
Rectángulo rc3 = rc
rc3.Inflate(-5, -5;
rc3.Height = 15;
GraphicsPath ruta3 = GetGraphicsPath(rc3, 20);
LinearGradientBrush br3 = new LinearGradientBrush(rc3, Color.FromArgb); (255, Color.White), Color.FromArgb(0, Color .White), LinearGradientMode.Vertical);
///
/// Dibujar gráficos
///
g. FillPath(br2, ruta2); //Dibujar sombra
g.FillPath(br1, ruta1); //Dibujar botón
g.FillPath(br3, path3); //Dibuja una burbuja blanca en la parte superior
///
///Establece el objeto de mapa de bits de memoria y realiza doble almacenamiento en búfer para operaciones de dibujo de caché secundaria
///
botónBitmapRectangle = new Rectángulo(rc.Location, rc.Size);
botón
nBitmap = new Bitmap(buttonBitmapRectangle.Width, buttonBitmapRectangle.Height);
Gráficos g_bmp = Graphics.FromImage(buttonBitmap);
g_bmp.SmoothingMode = SmoothingMode.AntiAlias;
g_bmp.FillPath(br1, ruta1);
g_bmp.FillPath(br3, ruta3);
///
///Asignación de región valor al botón
Región rgn = nueva Región(ruta1);
rgn.Union(ruta2);
this.Región = rgn;
///
/// Dibuja el texto del botón
///
GraphicsPath path4 = new GraphicsPath();
RectánguloF ruta1límites = ruta1.GetBounds();
Rectángulo rcText = nuevo Rectángulo((int)ruta1límites.X btnOffset, (int)ruta1límites.Y btnOffset, (int)ruta1límites.Width, ( int) path1bounds.Height);
StringFormat strformat = new StringFormat();
strformat.Alignment = StringAlignment.Center;
strformat.LineAlignment = StringAlignment. Centro;
ruta4.AddString(this.Text, this.Font.FontFamily, (int)this.Font.Style, this.Font.Size, rcText, strformat); Pluma txtPen = new Pluma(this.ForeColor, 1);
g.DrawPath(txtPen, ruta4);
g_bmp.DrawPath(txtPen, ruta4);
}
//Reescribe una serie de eventos
anulación protegida void OnMouseDown(MouseEventArgs e)
{
if (e .Button == MouseButtons.Left)
{
this.mouseAction = MouseActionType.Click
this.Invalidate(); > }
base.OnMouseDown(
e);
}
anulación protegida void OnMouseUp(MouseEventArgs e)
{
this.mouseAction = MouseActionType.Hover;
this.Invalidate();
base.OnMouseUp(e);
}
anulación protegida void OnMouseHover(EventArgs e)
{
this.mouseAction = MouseActionType.Hover;
this.Invalidate()
base.OnMouseHover(e);
}
anulación protegida void OnMouseEnter(EventArgs e)
{
this.mouseAction = MouseActionType.Hover;
this.Invalidate();
base.OnMouseEnter(e);
}
anulación protegida void OnMouseLeave(EventArgs e)
{
this.mouseAction = MouseActionType.None;
this.Invalidate()
base.OnMouseLeave(e); p> }
}
}