如何将鼠标单击事件处理程序添加到位图图像构造函数?

时间:2018-10-16 14:02:01

标签: c# .net

我目前正在使用Judith Bishop的书研究C#3.0设计模式。作者解释了Decorator模式的使用,并给出了示例代码,该代码允许显示JPG图像并绘制其他装饰(标签,边框等)。该代码的有趣之处在于,无需使用WindowsForm Designer即可绘制图像。整体解决方案对我来说似乎很陌生。 其中一项练习建议将鼠标单击事件处理程序添加到图像构造函数,这将导致标签显示。我已经在此站点和其他站点上发现了很多类似的问题。但是,所有这些问题都提供了仅在使用WindowsForm Designer时才适用的解决方案。 另外,我在图像构造函数中添加了几行,并编写了应该用于处理鼠标单击的方法。但是,该程序没有响应。

有人可以提出解决方案吗?

router.get('/something',async function(req, res, next) {
const data = await Model.aggregate([
      {
         $match: {
            "id": id
         }
      }
])
}

}

DecoratorPatternExample类 {

// DECORATOR PATTERN
// The original Photo class - Component class
public class Photo : Form
{
    Image image;
    public Photo()
    {
        image = new Bitmap(@"D:\jug.jpg");
        this.Text = "Lemonade";
        this.Paint += new PaintEventHandler(Drawer);
    }

    public virtual void Drawer(Object source, PaintEventArgs e)
    {
        e.Graphics.DrawImage(image, 30, 20);
    }
}

如果您有兴趣,整个代码为available here

2 个答案:

答案 0 :(得分:1)

“但是,所有这些问题提供的解决方案仅适合使用WindowsForm Designer的情况。”

Windows窗体设计器在Partial Class的另一部分上工作。它无能为力,无能为力。它所做的一切,和您在C#代码中所做的一样。所做的一切都会在构造函数中调用“ InitializeComponent()”的那一刻执行。

因此,Forms Designer所做的与您所做的没有实际的区别。

答案 1 :(得分:0)

感谢@LarsTech,此问题已解决!

这是工作代码:

class BorderedPhoto : Photo
{
    Photo photo;
    Color color;
    bool mouse_click = false;

    public BorderedPhoto(Photo p, Color c)
    {
        photo = p;
        color = c;
        this.MouseClick += new MouseEventHandler(mouse);
    }

    public void mouse(object sender, MouseEventArgs e) // a method which will handle the mouse clicking
    {
        if (e.Button == MouseButtons.Left)
        {
            mouse_click = true;
            Invalidate(); // ADD INVALIDATE HERE
        }
    }

    public override void Drawer(Object source, PaintEventArgs e)
    {
        photo.Drawer(source, e);
        if (mouse_click == true) // if mouse was clicked, then draw the border
            e.Graphics.DrawRectangle(new Pen(color, 10), 25, 15, 215, 225);
    }
}

伙计们,谢谢大家花时间解决我的问题!