2014-01-08 4 views
14

IDE:. Visual Studio, C# .net, Type = Windows, форма заявкиКак изменить панель Цвет рамки

Привет, В панели свойств я задать стиль границы с фиксированным Single»
, когда я бегу мой . применение его предоставление мне серый цвет, который я не знаю, как изменить цвет границы я попытался в Paint случае панели

private void HCp_Paint(object sender, PaintEventArgs e) 
{ 
    Panel p = sender as Panel; 
    ControlPaint.DrawBorder(e.Graphics, p.DisplayRectangle, Color.Yellow, ButtonBorderStyle.Inset); 
} 

его давая мне границы, как это:.

http://i772.photobucket.com/albums/yy9/yogeshkmrsoni/giving_zps877730fc.png

и я хочу фиксированные единые границы, как это:

http://i772.photobucket.com/albums/yy9/yogeshkmrsoni/want_zps081e3591.png

Я могу получить FixedSingle границы, но это в сером цвете, который является по умолчанию системы или IDE.

Так что pls предлагают мне, как я делаю это в желтом цвете.

ответ

8

Вы можете создать свой собственный Panel класс и рисовать границу в клиентской области:

[System.ComponentModel.DesignerCategory("Code")] 
public class MyPanel : Panel 
{ 
    public MyPanel() 
    { 
     SetStyle(ControlStyles.UserPaint | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     using (SolidBrush brush = new SolidBrush(BackColor)) 
      e.Graphics.FillRectangle(brush, ClientRectangle); 
     e.Graphics.DrawRectangle(Pens.Yellow, 0, 0, ClientSize.Width - 1, ClientSize.Height - 1); 
    } 

} 
+1

Я часто помещал рамку в «OnPaintBackground», просто чтобы сохранить частоту. – DonBoitnott

+0

Hi Sinatr, не могли бы вы объяснить, где написать этот код? Я не получаю, чтобы написать этот код, я новичок, PLS рассказать весь процесс. – yogeshkmrsoni002

+0

Это решение работает, но если у вас есть элемент управления на панели, который установлен на dock.fill (например), он перекрывается поверх прямоугольника, а прямоугольник скрыт. В любом случае, чтобы установить «полезное пространство» панели внутри прямоугольника, чтобы элементы управления внутри не перекрывали прямоугольник? – JPProgrammer

5

Я нашел этот пост полезным:

https://vicky4147.wordpress.com/2007/03/04/how-to-draw-a-custom-border-around-a-form-or-control/

Я также установить отступы панели в толщина границы, чтобы элементы управления внутри панели не перекрывали границу и не скрывали ее. В моем случае я не использовал прокладку в противном случае, так что это было бы хорошим решением, но все может стать более сложным, если вы также планируете использовать заполнение для большего, чем просто показ границы ...

+0

Это отличное решение, но есть небольшая проблема, когда у вас есть 'ScrollBar' в вашей' Panel'. Затем вы должны сделать также обработчик события 'Scroll'. То же, что и для 'Resize'. – Artholl

+0

Спасибо, намного лучше, чем другие перечисленные решения. Чистый и простой. – Daniel

+0

Спасибо за это решение. Я также нашел намного лучше. Я просто изменил функцию Invalidate на Refresh, так как Invalidate не стирал старые границы. – Joaobrunoah

2

Если вы наденете ' t хотите перейти к проблеме подклассификации панели, вы можете просто создать другую панель размером в 2 пикселя в каждом измерении, сделать ее цветом границы и поместить ее непосредственно за панелью, которая нуждается в границе. Это всего лишь несколько кликов в IDE ...

Смежные вопросы