• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1354
  • Last Modified:

Panel: no dotted-line border in design time?

Hello,

I'm trying to write a visual component (BorderPanel) that extends the System.Windows.Forms.Panel because I want to have more options for the BorderType property.
This works fine. However during design time, the designer for the System.Windows.Forms.Panel object always draws a dotted-line border around the panel (the reason is that a normal panel doesn't have a border and can not be distinguished on the form otherwise; the dotted line shows the designer where the panel is placed). Can anyone give me some example code how I must override the designer so it does NOT draw the dotted line (because my panel does already have a border).

Thanks,
Bart.
0
bartie
Asked:
bartie
1 Solution
 
CJ_SCommented:
This is default for any component you create. AFAIk you cannot change that.

CJ
0
 
bartieAuthor Commented:
No, you really are able to change design time attributes. Meanwhile I found how to do it on www.syncfusion.com. My problem was that I didn't know I had to add a reference (Project -> Add Reference...) to System.Design.Dll. The following example draws a BLUE dotted border in case the panel border is not visible. Off course the code could be changed to not drawing a border. In the OnPaintAdornments you can e.g. also write code to draw some design time things which are not visible in runtime.

Thanks anyway.

using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.ComponentModel;

namespace TestDesigner
{
[Designer(typeof(BorderPanel.BorderPanelDesigner))]
public class BorderPanel : System.Windows.Forms.Panel
{
 internal class BordererPanelDesigner:ParentControlDesigner
 {
 protected override void OnPaintAdornments
                                      (PaintEventArgs pe)
 {
 System.Windows.Forms.Panel panel;
 panel = (System.Windows.Forms.Panel)this.Component;
 if (panel.BorderStyle == BorderStyle.None)
   this.DrawDesignTimeBorder(pe.Graphics, panel);          
 base.OnPaintAdornments(pe);
 }
 
 public void DrawDesignTimeBorder
                           (Graphics g, Control control)
 {
 System.Drawing.Rectangle clientRectangle;
 System.Drawing.Color bgColor, adjustedBgColor;
 System.Drawing.Pen pen;
 clientRectangle = control.ClientRectangle;
 bgColor = control.BackColor;
 if (((double) bgColor.GetBrightness()) >= 0.5)
  adjustedBgColor = ControlPaint.Dark(control.BackColor);
 else
  adjustedBgColor = ControlPaint.Light(control.BackColor);
 pen = new Pen(adjustedBgColor);
 pen.DashStyle = DashStyle.Dash;
 pen.Color=Color.Blue;
 clientRectangle.Width = (clientRectangle.Width - 1);
 clientRectangle.Height = (clientRectangle.Height - 1);
 g.DrawRectangle(pen,clientRectangle);
 pen.Dispose();
 }
}

//TODO: the implementation of the class BorderPanel itself.

}        
0
 
DanRollinsCommented:
hi bartie,
This is useful information.  Since you solved the problem yourself, I recommend that you ask Community Support to refund your points and to save this in the PAQ.  To post a question to CS, click here: http://www.experts-exchange.com/jsp/qAskQuestion.jsp?ta=commspt
-- Dan
0
 
MindphaserCommented:
Points refunded and moved to PAQ

** Mindphaser - Community Support Moderator **
0

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now