首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >所有现有PictureBox控件的.NET Windows窗体鼠标输入效果

所有现有PictureBox控件的.NET Windows窗体鼠标输入效果
EN

Stack Overflow用户
提问于 2012-12-03 04:05:48
回答 1查看 772关注 0票数 2

我是新来的,这是我在这里的第一篇文章。如果我没有遵循在这里创建新问题的标准,我深表歉意。

在过去的几个小时里,我绞尽脑汁试图编写一个自定义类,它允许我向现有的PictureBox控件添加一个新属性,允许我为自定义属性设置一个颜色,这将导致在用户悬停控件时使用选定的颜色设置边框。

以下是我到目前为止编写的代码:

代码语言:javascript
复制
[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控件。

任何帮助都将不胜感激=)

EN

回答 1

Stack Overflow用户

发布于 2013-02-14 19:53:06

也许您可以通过使用自定义用户控件而不是为图片框创建扩展属性来更简单地实现您的目标。下面是一个简单的示例:

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13673306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档