我只是在它周围画一个矩形,在图片框周围做一个边框。然而,由于图片框后面有一个面板,我无法看到图片框周围的边框(尽管事实上我画了图片边框。这里是代码:
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();
}
答案 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;
}
它应该像你想要的那样工作。