Principales respuestas
Imitar botón.

Pregunta
-
Buenas, tengo estos dos botones. El primero es el botón que he hecho y el segundo el que quiero imitar, pero no hay manera de que me quede igual. Los problemas están en degradado del color de fondo (LinearGradientBrush linGrBrush = new LinearGradientBrush(rect2, Color.White, System.Drawing.Color.DimGray, LinearGradientMode.Vertical); ) y con la sombra del borde que tampoco se como hacerlo.
Si me podéis ayudar os los agradezco.
Saludos.
- Cambiado webJoseModerator miércoles, 31 de octubre de 2012 23:26 (De:Lenguaje C#)
Respuestas
-
ejemplo:
Codigo Paint:
protected override void OnPaint(PaintEventArgs pevent) { //base.OnPaint(pevent); pevent.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias; Rectangle bounds = new Rectangle(0, 0, this.Width, this.Height); using (LinearGradientBrush brush = new LinearGradientBrush(bounds, SystemColors.Control, SystemColors.ControlDarkDark, LinearGradientMode.Vertical)) { Blend blend = new Blend(); blend.Positions = new float[] { 0.0f, 0.1f, 0.1f, 0.2f, 0.4f, 0.5f, 1.0f }; blend.Factors = new float[] { 0.0f, 0.1f, 0.1f, 0.4f, 0.6f, 0.8f, 1.0f }; brush.Blend = blend; pevent.Graphics.FillRectangle(brush, bounds); } using (Pen pen = new Pen(SystemColors.ControlDarkDark, 4)) { pevent.Graphics.DrawRectangle(pen, bounds); } TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, bounds, this.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter); }
no lo redondie porque lo es de ejemplo ;-)
Salu2,
Marvin E. Pineda
ComboBoxMultiColumns
- Marcado como respuesta Aivalo miércoles, 31 de octubre de 2012 16:50
Todas las respuestas
-
hola
estas usando GDI para armar el estilo del boton?
porque por lo que veo el texto cuando realices un DrawText() deverias indicarle la posicione
has validaod el Rectangle , si lo cambias como varia
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
Lo del texto es lo de menos, porque le pongo un label encima de momento. Pero lo que más me interesa es poder controlar el degradado y hacer un borde similar. Del degradado no entiendo como queda tan arriba y queda como si fuera un poco de brillo. Y el borde no termina de quedar bien como podéis ver.
-
Os paso el link que he estado consultando:
-
¿seguro que el efecto está hecho con degradados y colores? Lo mismo está hecho como en las web y demás, que salen a partir de imagenes que usan como fondo, lo digo porque lo mismo es más fácil abordar el tema a partir de ahí, usando una imagen con el degradado que buscas como fondo del botón.
Un saludo.
- Editado fjbgcmbsgr miércoles, 31 de octubre de 2012 13:28
-
-
la clase LinearGradientBrush tiene una propiedad llamada Blend, con esta puedes indicar la posición y el factor de los colores a aplicar al degradado, seguro en el codigo del ejemplo ha de estar pero no lo has notado... tambien he visto que se puede utilizar la propiedad InterpolationColors. deberias de leer la ayuda de la clase.
ademas, tienes que suavisar los bordes para que se vean mas nitidos.
mi duda tambien es? debe de quedar tu control igual al que tratas de imitar?...
Salu2,
Marvin E. Pineda
ComboBoxMultiColumns
-
jajajaja.... acabo de descargar el ejemplo... y para el codigo que utilizas para giarte el aplica los efectos de modo manual, pintando Circulos con transparencia.... pero el que tu quieres imitar debe de estar utilizando Blend o InterpolationColors.
debes de pintar el Background usando Blend o InterpolationColors y el borde pintarlo por aparte, aplicando tu creatividad...
Salu2,
Marvin E. Pineda
ComboBoxMultiColumns
-
ejemplo:
Codigo Paint:
protected override void OnPaint(PaintEventArgs pevent) { //base.OnPaint(pevent); pevent.Graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias; Rectangle bounds = new Rectangle(0, 0, this.Width, this.Height); using (LinearGradientBrush brush = new LinearGradientBrush(bounds, SystemColors.Control, SystemColors.ControlDarkDark, LinearGradientMode.Vertical)) { Blend blend = new Blend(); blend.Positions = new float[] { 0.0f, 0.1f, 0.1f, 0.2f, 0.4f, 0.5f, 1.0f }; blend.Factors = new float[] { 0.0f, 0.1f, 0.1f, 0.4f, 0.6f, 0.8f, 1.0f }; brush.Blend = blend; pevent.Graphics.FillRectangle(brush, bounds); } using (Pen pen = new Pen(SystemColors.ControlDarkDark, 4)) { pevent.Graphics.DrawRectangle(pen, bounds); } TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, bounds, this.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter); }
no lo redondie porque lo es de ejemplo ;-)
Salu2,
Marvin E. Pineda
ComboBoxMultiColumns
- Marcado como respuesta Aivalo miércoles, 31 de octubre de 2012 16:50
-