2011-10-11 22 views

risposta

14

Sì, nessun problema, si può dare un controllo una forma arbitraria con la proprietà Regione. Aggiungi una nuova classe al tuo progetto e incolla il codice mostrato di seguito. Compilare. Rilasciare il nuovo controllo dalla parte superiore della casella degli strumenti sul modulo.

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

Ah, grazie per questo! Dà davvero un'immagine delle possibilità che hai quando estendi un corso. E quanto è facile ottenere un componente modificato nella tua casella degli strumenti. :) – Arndroid

9

Round bordi come in tondo angoli?

Se in modo da controllare 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

mettendo scatola 1 Immagine sulla forma e scrivere questo codice Inoltre è possibile cambiare il numero meno fianco di larghezza e l'altezza per ottenere il miglior risultato

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

Grazie, questa è un'ottima soluzione per la quantità di sintassi necessaria. Non ho provato quante risorse ci sono, ma mi piace come è adesso. Inoltre, bella foto: P – soulshined

0

Grazie , Hans. Ma ho anche bisogno di un aspetto liscio. Ho fatto qualche ricerca su questo argomento, ma non sono riuscito a trovare una soluzione. Poi ho provato a farlo da solo e ho trovato la soluzione qui sotto. Forse qualcun altro ha bisogno.

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); 
     } 
    } 
Problemi correlati