如何将Picturebox的边框带到前面?

时间:2015-07-29 13:02:24

标签: c# winforms border panel picturebox

我只是在它周围画一个矩形,在图片框周围做一个边框。然而,由于图片框后面有一个面板,我无法看到图片框周围的边框(尽管事实上我画了图片边框。这里是代码:

private void Form1_Load(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Maximized;
        Graphics objGraphics = null;
        objGraphics = this.CreateGraphics();
        objGraphics.Clear(SystemColors.Control);
        objGraphics.DrawRectangle(Pens.Blue,
             ileriresmi.Left - 1, ileriresmi.Top - 1,
              ileriresmi.Width + 1, ileriresmi.Height + 1);
        objGraphics.Dispose();
    }

2 个答案:

答案 0 :(得分:0)

这里有一些错误。首先,您在表单上进行绘图,这是您提到的面板所涵盖的,其次,您只需在Load事件中绘制一次边框,而不是每次表单接收WM_PAINT消息。

请参阅here,了解后者出错的原因。

为了在正确的位置绘制边框,为什么不将BackColor面板的PictureBox设置为Color.Blue,并为该面板指定{的非零值{1}}? (或者,如果面板包含其他控件,则仅为边框添加中间面板。)

答案 1 :(得分:0)

你可以尝试这个..但它会画在图片框内

 private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {


            e.Graphics.DrawRectangle(new Pen(Color.Red, 2f),0,0,pictureBox1.Size.Width-2, pictureBox1.Size.Height-2);


        }

完整的解决方案将是这样的。 将此类添加到您的应用程序并构建应用程序。

  public class PicExt : PictureBox
    {
        private Color _borderColor;
        private int _borderWidth;
        [Browsable(true)]
        public Color BorderColor { 
            get { return _borderColor; } 
            set { _borderColor = value; this.Invalidate(); } 
        }
        [Browsable(true)]
        public int BorderWidth {
            get { return _borderWidth; }
            set { _borderWidth = value; this.Invalidate(); }
        }

        public PicExt()
        {
            _borderColor = Color.Red;
            _borderWidth = 3;

        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
            pe.Graphics.DrawRectangle(new Pen(BorderColor, BorderWidth), BorderWidth, BorderWidth, this.Size.Width - (BorderWidth*2), this.Size.Height - (BorderWidth*2));
        }
    }

构建应用程序后,您将在工具箱中看到新的控件“PicExt”。 用PicExt Control替换pictureBox 并订阅这样的点击事件。

 private void button1_Click(object sender, EventArgs e)
        {
            //set the color here
            picExt1.BorderColor = Color.Red;
            //and frame width 
            picExt1.BorderWidth = 5;
        }

它应该像你想要的那样工作。