环境:VS2005
语言: C#
问题描述:Form上有个panel,dock为fill。panel上有个pictureBox1。pictureBox1的Location为(100,100),Size为(100,100)
现在,我想给这个pictureBox1画一个边框,代码如下:        private void Form2_Load(object sender, EventArgs e)
        {
            Graphics g = this.pictureBox1.CreateGraphics();
            g.DrawRectangle(new Pen(Color.Red, 4), new Rectangle(96, 100, 108, 100));
        }问:为什么该边框不显示?如何能给pictureBox1画上一个边框?望各位达人赐教。
谢谢

解决方案 »

  1.   

    g.DrawRectangle(new Pen(Color.Red, 4), new Rectangle(100, 100, 100, 100)); 
    参考
    http://topic.csdn.net/t/20061002/09/5060649.html
    http://heisetoufa.javaeye.com/blog/227803
      

  2.   

    你的问题比较过分~~你放到Load事件里不是被重绘掉的....什么都不显示..第2 你的PICTUREBox的大小才100*100你绘到 96*100的位开始绘制  只让看到一个角啊
      

  3.   

    要添加边框很容易:public Form2()
    {
        InitializeComponent();
        this.pictureBox1.BorderStyle = BorderStyle.FixedSingle;   //<---
    }
    但是要处理好自定义边框颜色就比较麻烦些。
    尤其在Vista Aero开启的情况下,由于非客户区是由DWM(Desktop Window Manager)控制的,情况还会更复杂些。
      

  4.   

    在PictureBox的Paint事件中e.Graphics.DrawRectangle(new Pen(Color.Red, 4), new Rectangle(96, 100, 108, 100)); 
      

  5.   

    坐标有问题:new Rectangle(96, 100, 108, 100)); 这里的坐标是相对于panel的坐标.面这里应是相对于pictureBox1的坐标. private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawRectangle(new Pen(Color.Red, 4),new Rectangle(new Point(2,2),new Size(this.pictureBox1.Width-4,this.pictureBox1.Height-4))); //考虑到线的宽度为4        }
      

  6.   

       private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, Color.Red, ButtonBorderStyle.Solid);  
            }
      

  7.   

    在pictureBox的Paint事件中,写你的DrawXXXX代码。
      

  8.   

    谢谢以上给位,对我很有帮助。对于单个的pictureBox画边框,已经能正确显示。下面是这个问题的升级版:
    在pictureBox1上多一个pictureBox2。pictureBox2的Location也为(100,100),Size也为(100,100) (就是pictureBox2把pictureBox1给遮住了。)
    其实简单点,就只想问:为什么在有控件交替的情况下,边框不能正确显示???
    代码如下:        private bool isOK = false;        private void button1_Click(object sender, EventArgs e)
            {            
                if (isOK)
                {
                    pictureBox2.Visible = true;
                    pictureBox1.Visible = false;
                    Graphics g = this.pictureBox2.CreateGraphics();
                    g.DrawRectangle(new Pen(Color.Black, 4), new Rectangle(-4, 0, pictureBox2.Width+4, pictureBox2.Height+4));
                }
                else
                {
                    pictureBox1.Visible = true;
                    pictureBox2.Visible = false;
                    Graphics g = this.pictureBox1.CreateGraphics();
                    g.DrawRectangle(new Pen(Color.Black, 4), new Rectangle(-4, 0, pictureBox1.Width + 4, pictureBox1.Height + 4));
                }
                isOK = !isOK;
            }
      

  9.   

    不好意思,忘记结贴了。
    谢谢大家。
    解决方法如下:在有控件交替(visible改变)的情况下,必须在paint事件里面写 画边框 的操作。如果没有控件交替,可以在任何一个地方写 画边框 的操作。