如何更改图片框(winform)的边框颜色?

8

我希望能够根据不同的事件来打开或关闭PictureBox周围的边框颜色/样式。

是否有属性或函数可以帮助我实现这个目标?

4个回答

7
这是我一直用来做这件事的方法:
要改变边框颜色,请在PictureBox控件的Paint事件处理程序中调用以下内容:
private void pictureBox1_Paint_1(object sender, PaintEventArgs e)
    {
        ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, Color.Red, ButtonBorderStyle.Solid);
    }

为了动态改变边框颜色,例如在鼠标点击事件中,我使用图片框的Tag属性来存储颜色,并调整图片框的Click事件以从那里检索它。例如:
  if (pictureBox1.Tag == null) { pictureBox1.Tag = Color.Red; } //Sets a default color
  ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, (Color)pictureBox1.Tag, ButtonBorderStyle.Solid);

那么PictureBox的点击事件,会是这样的:

private void pictureBox1_Click(object sender, EventArgs e)
        {
            if ((Color)pictureBox1.Tag == Color.Red) { pictureBox1.Tag = Color.Blue; }
            else {pictureBox1.Tag = Color.Red; }
            pictureBox1.Refresh();
        }

在开头需要加上using System.Drawing;,最后别忘了调用pictureBox1.Refresh()。享受吧!


如果PictureBox有颜色,我们如何去除颜色? - paraJdox1

4

Winforms不允许您更改控件的边框颜色,它们由用户选择的主题固定。最简单的方法是将picture box放在面板内,并使其略微缩小,然后只需更改面板的BackColor即可实现所需效果。

设计师会有些麻烦,因为它试图将控件对齐到网格上,请直接在属性窗口中编辑Location和Size属性,而不是使用鼠标操作。


但是我希望当我按下图片框时,它的正方形/框架变为红色,这是否可行?或者至少让图片框看起来被选中了...关于您的评论,我已经将我的图片框放入了表格布局中,并设置了单元格的背景颜色... :( - NewOrder
实现MouseDown事件处理程序,设置颜色。 - Hans Passant

1
如果您在谈论鼠标事件,则可以利用MouseEnter和MouseLeave或MouseHover事件来实现此操作,并且可以使用OnPaint事件来执行实际的绘制。 只需在上述鼠标事件或任何您关心的事件中使PictureBox失效即可。

我明白了,我需要使用鼠标事件。 - NewOrder

1

这里有一个 简单的示例(用VB.NET编写,但转换应该很简单),可以为您完成这项工作。您不需要像Passant的答案那样使用额外的Panel.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接