Вы должны настроить свой собственный Panel
с небольшим количеством пользовательских живописи:
//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));
}
}
}
Вот снимок экрана на панели с толщиной от 30
:
ПРИМЕЧАНИЕ: Размер Rectangle
рассчитывается в середине рисунка линии, предположим, что вы рисуете линию с толщиной 4
, будет смещение 2 снаружи и 2 внутри.
я не испытывал случай, данный г-ном Hans
, чтобы исправить это просто обрабатывать событие SizeChanged
для вашего panel1
, как это:
private void panel1_SizeChanged(object sender, EventArgs e){
panel1.Invalidate();
}
Вы также можете заходящий ResizeRedraw = true
используя Reflection
без необходимости обрабатывать SizeChanged
событие, как описано выше, как это:
typeof(Control).GetProperty("ResizeRedraw", BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(panel1, true, null);
Вы можете увидеть небольшое мерцание при изменении размера, просто добавьте этот код, чтобы включить DoubleBuffered для у наша панель 1:
typeof(Panel).GetProperty("DoubleBuffered",
BindingFlags.NonPublic | BindingFlags.Instance)
.SetValue(panel1,true,null);
Используйте событие Paint(), чтобы оно выглядело так густо, как вы хотите. –
Это [дубликат] (http://stackoverflow.com/questions/1852829/i-want-to-make-a-panel-have-a-thick-border-can-i-set-this-somehow) , Тем не менее, принятый ответ здесь - единственный, который работал для меня. Другие решения обрезаны с правой и нижней границ. – nunzabar