【问题标题】:How to Bring the Border of a Picturebox to Front?如何将图片框的边框放在前面?
【发布时间】:2015-07-29 13:02:24
【问题描述】:

我通过简单地在图片框周围绘制一个矩形来制作一个边框。但是由于图片框后面有一个面板,我看不到图片框周围的边框(尽管我已经在图片周围绘制了边框。这是代码:

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();
    }

【问题讨论】:

  • 您是否尝试使用Panel.CreateGraphics() 而不是this.CreateGraphics,并且您是否也将此实现添加到您的Paint 事件处理程序中?否则,当重新绘制表单时(例如,通过调整其大小或在其前面放置另一个窗口),您绘制的边框将立即消失

标签: c# winforms border panel picturebox


【解决方案1】:

你可以试试这个..但它会在图片框内绘制

 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 控件替换图片框 并像这样订阅点击事件。

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

它应该完全按照你想要的方式工作。

【讨论】:

  • 谢谢,当我点击图片框时如何更改边框颜色?我将相同的方法复制到 picturebox1_click 方法,但它给出了这个错误:错误 5 'System.EventArgs' 不包含'objGraphics2' 的定义,并且没有扩展方法'objGraphics2' 接受'System.EventArgs' 类型的第一个参数可能是找到(您是否缺少 using 指令或程序集引用?)
  • 在 Click() 处理程序中,只需更改 BorderColor 属性:pictureBox1.BorderColor = Color.Green;
【解决方案2】:

这里有几个问题。首先,您正在表单上进行绘图,该面板被您提到的面板覆盖,其次,您只在 Load 事件中绘制一次边框,而不是每次表单收到 WM_PAINT 消息时.

请参阅here 了解后者为何错误的原因。

至于在正确的位置绘制边框,为什么不将包含PictureBox 的面板的BackColor 设置为Color.Blue,并为该面板赋予Padding 的非零值? (或者,如果面板包含其他控件,则为边框添加一个中间面板。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多