2011-10-11 258 views

Respuesta

14

Sí, no hay problema, le puede dar un control de una forma arbitraria con su propiedad Región. Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Compilar. Coloque el nuevo control desde la parte superior de la caja de herramientas en su formulario.

using System; 
using System.Drawing; 
using System.Drawing.Drawing2D; 
using System.Windows.Forms; 

class OvalPictureBox : PictureBox { 
    public OvalPictureBox() { 
     this.BackColor = Color.DarkGray; 
    } 
    protected override void OnResize(EventArgs e) { 
     base.OnResize(e); 
     using (var gp = new GraphicsPath()) { 
      gp.AddEllipse(new Rectangle(0, 0, this.Width-1, this.Height-1)); 
      this.Region = new Region(gp); 
     } 
    } 
} 
+0

Ahh, gracias por esto! Realmente da una imagen de las posibilidades que tienes cuando extiendes una clase. Y qué fácil es obtener un componente modificado en su caja de herramientas. :) – Arndroid

9

redondo bordes como en la ronda esquinas?

Si a fin de comprobar http://social.msdn.microsoft.com/forums/en-US/winforms/thread/603084bb-1aae-45d1-84ae-8544386d58fd

Rectangle r = new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height); 
System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath(); 
int d = 50; 
gp.AddArc(r.X, r.Y, d, d, 180, 90); 
gp.AddArc(r.X + r.Width - d, r.Y, d, d, 270, 90); 
gp.AddArc(r.X + r.Width - d, r.Y + r.Height - d, d, d, 0, 90); 
gp.AddArc(r.X, r.Y + r.Height - d, d, d, 90, 90); 
pictureBox1.Region = new Region(gp); 
10

poniendo cuadro 1 imagen en el formulario y escribir el código También puede cambiar el número, menos al lado de la anchura y la altura para obtener mejor resultado

System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath(); 
      gp.AddEllipse(0, 0, pictureBox1.Width - 3, pictureBox1.Height - 3); 
      Region rg = new Region(gp); 
      pictureBox1.Region = rg; 

enter image description here

+0

Gracias, esta es una gran solución para la cantidad de sintaxis necesaria. No he probado la cantidad de recursos que esto ofrece, pero me gusta lo que es por ahora. Además, buena foto: P – soulshined

0

Gracias Hans Pero también necesito una mirada suave. Hice algunas investigaciones sobre este tema, pero no pude encontrar una solución. Luego traté de hacerlo yo mismo y encontré la solución a continuación. Quizás alguien más lo necesite.

protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 
     using (GraphicsPath gp = new GraphicsPath()) 
     { 
      gp.AddEllipse(0, 0, this.Width - 1, this.Height - 1); 
      Region = new Region(gp); 
      e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; 
      e.Graphics.DrawEllipse(new Pen(new SolidBrush(this.BackColor), 1), 0, 0, this.Width - 1, this.Height - 1); 
     } 
    } 
Cuestiones relacionadas