我是新来的,这是我在这里的第一篇文章。如果我没有遵循在这里创建新问题的标准,我深表歉意。
在过去的几个小时里,我绞尽脑汁试图编写一个自定义类,它允许我向现有的PictureBox控件添加一个新属性,允许我为自定义属性设置一个颜色,这将导致在用户悬停控件时使用选定的颜色设置边框。
以下是我到目前为止编写的代码:
[ProvideProperty("HoverColor", typeof(PictureBox))]
public class PictureBoxHover : Component, IExtenderProvider
{
private readonly Dictionary<IntPtr, Color> _hoverColors;
public PictureBoxHover()
{
_hoverColors = new Dictionary<IntPtr, Color>();
}
public bool CanExtend(object extendee)
{
return (extendee is PictureBox);
}
public Color GetHoverColor(PictureBox picb)
{
Color color;
if (_hoverColors.TryGetValue(picb.Handle, out color))
return color;
return Color.Empty;
}
public void SetHoverColor(PictureBox picb, Color color)
{
Color hoverColor;
_hoverColors[picb.Handle] = color;
}
}上面的代码将自定义属性"HoverColor“添加到我的解决方案中所有现有的PictureBox控件中-正如我所需要的。现在我需要做的是,当用户将鼠标悬停在控件上时,让它在我的PictureBoxes周围用设定的颜色绘制一个边框。
我不希望我的类继承PictureBox或控件类,因为这需要将我所有的PictureBoxes从普通的PictureBox更改为我的自定义PictureBox -这就是为什么我想将此自定义属性和功能‘附加’到普通的PictureBox控件。
任何帮助都将不胜感激=)
发布于 2013-02-14 19:53:06
也许您可以通过使用自定义用户控件而不是为图片框创建扩展属性来更简单地实现您的目标。下面是一个简单的示例:
public class FramedPictureBox : UserControl
{
private readonly PictureBox _pictureBox;
public FramedPictureBox()
{
const int FRAME_SIZE = 3;
_pictureBox = new PictureBox
{
Left = FRAME_SIZE,
Top = FRAME_SIZE,
Width = Width - 2*FRAME_SIZE,
Height = Height - 2*FRAME_SIZE,
Anchor = AnchorStyles.Left | AnchorStyles.Bottom | AnchorStyles.Right | AnchorStyles.Top
};
_pictureBox.MouseEnter += OnPictureBoxMouseEnter;
_pictureBox.MouseLeave += OnPictureBoxMouseLeave;
Controls.Add(_pictureBox);
}
protected override void OnLoad(EventArgs e)
{
var image = new Bitmap(_pictureBox.Width, _pictureBox.Height);
var graphics = Graphics.FromImage(image);
graphics.Clear(Color.White);
_pictureBox.Image = image;
base.OnLoad(e);
}
private void OnPictureBoxMouseEnter(object sender, EventArgs e)
{
BackColor = Color.Red;
}
private void OnPictureBoxMouseLeave(object sender, EventArgs e)
{
BackColor = SystemColors.Control;
}
}https://stackoverflow.com/questions/13673306
复制相似问题