环境: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画上一个边框?望各位达人赐教。
谢谢
语言: 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画上一个边框?望各位达人赐教。
谢谢
参考
http://topic.csdn.net/t/20061002/09/5060649.html
http://heisetoufa.javaeye.com/blog/227803
{
InitializeComponent();
this.pictureBox1.BorderStyle = BorderStyle.FixedSingle; //<---
}
但是要处理好自定义边框颜色就比较麻烦些。
尤其在Vista Aero开启的情况下,由于非客户区是由DWM(Desktop Window Manager)控制的,情况还会更复杂些。
{
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 }
{
ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, Color.Red, ButtonBorderStyle.Solid);
}
在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;
}
谢谢大家。
解决方法如下:在有控件交替(visible改变)的情况下,必须在paint事件里面写 画边框 的操作。如果没有控件交替,可以在任何一个地方写 画边框 的操作。