【发布时间】:2011-03-13 16:10:01
【问题描述】:
我想根据不同的事件设置图片框周围的边框颜色/样式打开和关闭。
是否有帮助我实现该目标的属性或功能?
【问题讨论】:
标签: c# winforms picturebox
我想根据不同的事件设置图片框周围的边框颜色/样式打开和关闭。
是否有帮助我实现该目标的属性或功能?
【问题讨论】:
标签: c# winforms picturebox
这一直是我使用的:
要更改边框颜色,请从 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);
然后,图片框的 Click 事件将如下所示:
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()。享受吧!
【讨论】:
Winforms 不允许您更改控件的边框颜色,它们由用户选择的主题固定。无需编写自己的控件即可获得所需内容的最简单方法是将图片框放在面板中,使其稍小一些。然后只需更改面板的 BackColor。
设计器会与您争吵,因为它会尝试将控件对齐到网格,直接在“属性”窗口中编辑位置和大小属性,而不是用鼠标移动它。
【讨论】:
如果您在谈论鼠标事件,那么可以使用 MouseEnter 和 MouseLeave 或 MouseHover 事件来执行此操作,并且可以使用 OnPaint 事件来执行实际绘图。只需在上述鼠标事件或您关心的任何事件上使 PictureBox 无效。
【讨论】:
这是一个 simple example(在 VB.NET 中,但转换它应该很简单)为您完成此操作。您不必担心像 Passant 的回答那样使用额外的面板。
【讨论】: