我目前正在使用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。
答案 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);
}
}
伙计们,谢谢大家花时间解决我的问题!