I have searching and the result cannot solve my case. Actually I have a panel and I want the panel have thicker border than Windows given. I need BorderStyle
BorderStyle.FixedSingle
thicker.. Thanks before
You have to customize your own Panel
with a little custom painting:
//Paint event handler for your Panel
private void panel1_Paint(object sender, PaintEventArgs e){
if(panel1.BorderStyle == BorderStyle.FixedSingle){
int thickness = 3;//it's up to you
int halfThickness = thickness/2;
using(Pen p = new Pen(Color.Black,thickness)){
e.Graphics.DrawRectangle(p, new Rectangle(halfThickness,
halfThickness,
panel1.ClientSize.Width-thickness,
panel1.ClientSize.Height-thickness));
}
}
}
Here is the screen shot of panel with thickness of 30
:
NOTE: The Size of Rectangle
is calculated at the middle of the drawing line, suppose you draw line with thickness of 4
, there will be an offset of 2 outside and 2 inside.
I didn't test the case given by Mr Hans
, to fix it simply handle the event SizeChanged
for your panel1
like this:
private void panel1_SizeChanged(object sender, EventArgs e){
panel1.Invalidate();
}
You can also setting ResizeRedraw = true
using Reflection
without having to handle the SizeChanged
event as above like this:
typeof(Control).GetProperty("ResizeRedraw", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(panel1, true, null);
You may see a little flicker when resizing, just add this code to enable doubleBuffered for your panel1:
typeof(Panel).GetProperty("DoubleBuffered",
BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(panel1,true,null);
To create a panel with border I place a panel in a panel. The "border panel" has the background color of the wanted border color and a padding, while the padding
size is the wanted border thickness
.
The advantage of this solution is that there is no flickering and no problems with resize.
This can be very simple be created in the designer or in code behind.
Code behind:
Panel panel_Border = new Panel();
Panel panel_Embedded = new Panel();
panel_Border.BackColor = Color.Green;
panel_Border.Controls.Add(panel_Embedded);
// this is the border thickness
panel_Border.Padding = new System.Windows.Forms.Padding(6);
panel_Border.Size = new System.Drawing.Size(200, 100);
panel_Embedded.BackColor = System.Drawing.SystemColors.Control;
panel_Embedded.Dock = System.Windows.Forms.DockStyle.Fill;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With