自定义PictureBox控件

时间:2011-06-11 15:26:31

标签: c# winforms inheritance user-controls

有人可以告诉我一个如何基于图片框创建自定义控件的示例吗?

我只是想要这样:如果点击图片框(OnKeyDown),图像应该向下移动3个像素,向右移动3个像素。之后在OnKeyUp事件中,我想恢复原始图像。

有人可以告诉我该怎么做吗?

2 个答案:

答案 0 :(得分:2)

“获取点击”是OnMouseX,而不是OnKeyX

public partial class UserControl1 : PictureBox 
{
    public UserControl1()
    {
        InitializeComponent();
    }

    private bool shifted = false;

    protected override void OnMouseDown(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && this.Image != null)
        {
            this.shifted = true;
            this.Invalidate();
        }

        base.OnMouseDown(e);
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && this.Image != null)
        {
            this.shifted = false;
            this.Invalidate();
        }

        base.OnMouseUp(e);
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        if (this.shifted)
        {
            pe.Graphics.TranslateTransform(3, 3, System.Drawing.Drawing2D.MatrixOrder.Append);
        }

        base.OnPaint(pe);
    }
}

答案 1 :(得分:0)

我知道这是一个老帖子,但我找到它并且非常有用。 但我花了大约一个工作日解决了一个问题,我的DrawRectangle是在我加载的图像下面绘制的。 解决方案是在base.OnPaint(pe);方法的开头移动OnPaint方法。

希望这有帮助。

<强>亚当