2016-01-03 19 views
5

Przezroczyste obrazy są czystym złem w Windows Forms, dlatego stworzyłem niestandardową klasę sterującą, która będzie je obsługiwać. Projektant nie pokazuje mojej kontroli, gdy jest pusty. Chciałbym dodać subtelne obramowanie, ale tylko w widoku projektu (i gdy użytkownik nie doda obramowania). Jak to zrobić?Jak dodać obramowanie do niestandardowego elementu sterującego w widoku projektu?

Moja klasa jest:

class TransparentImage : Control 
{ 
    public Image Image { get; set; } 

    protected Graphics graphics; 

    public string FilePath { get; set; } 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      CreateParams cp = base.CreateParams; 
      cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT 

      return cp; 
     } 
    } 

    protected override void OnPaintBackground(PaintEventArgs pevent) 
    { 
     // Don't paint background 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     // Update the private member so we can use it in the OnDraw method 
     this.graphics = e.Graphics; 

     // Set the best settings possible (quality-wise) 
     this.graphics.TextRenderingHint = 
      System.Drawing.Text.TextRenderingHint.AntiAlias; 
     this.graphics.InterpolationMode = 
      System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear; 
     this.graphics.PixelOffsetMode = 
      System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; 
     this.graphics.SmoothingMode = 
      System.Drawing.Drawing2D.SmoothingMode.HighQuality; 

     if (Image != null) 
     { 
      // Sets the images' sizes and positions 
      var width = Image.Size.Width; 
      var height = Image.Size.Height; 
      var size = new Rectangle(0, 0, width, height); 

      // Draws the two images 
      this.graphics.DrawImage(Image, size); 
     } 
    } 
} 

Odpowiedz

6

Sprawdź if (this.DesignMode) w swojej OnPaint i nazywają DrawRectangle.

Może chcesz użyć modelu new Pen(SystemColors.ActiveBorder) { DashStyle = DashStyle.Dot }

Powiązane problemy