在图片框上绘制矩形



所以我正在尝试在图像上自动绘制一堆矩形。我基本上已经想好了如何画它们,但我遇到的问题是,我似乎只有在与图片框互动时才能真正画出它们。

namespace myGUI
{
public partial class formPicture : Form
{
public formPicture()
{
InitializeComponent();
pbImage.Image = Image.FromFile(@"../../Images/myImage.bmp");
// Doesn't Work
var g = pbImage.CreateGraphics();
g.DrawRectangle(new Pen(Color.Red, 5), 500, 200, 20, 20);
}
private void formPicture_Shown(object sender, EventArgs e)
{
// Doesn't Work
var g = pbImage.CreateGraphics();
g.DrawRectangle(new Pen(Color.Red, 5), 500, 200, 20, 20);
}
private void pbImage_Click(object sender, EventArgs e)
{
// Works
var g = pbImage.CreateGraphics();
g.DrawRectangle(new Pen(Color.Red, 5), 500, 200, 20, 20);
}
}
}

pbImage_Click((调用成功地在我的图片框上绘制了矩形。另外两个尝试绘制矩形的实例似乎没有任何结果。

我不知道为什么它在一种情况下有效,而在其他情况下无效?我试过使图形无效,但没有成功。我已尝试将其添加到"绘制"事件中,但没有成功。我已经尝试将它添加到已验证的事件、可见事件、加载的事件,以及我能想到的几乎任何其他事件中,这样一旦GUI处于活动状态,它实际上可能会导致绘制矩形。

它似乎唯一有效的时间是点击或鼠标点击(我没有尝试过其他互动事件,如鼠标上升或鼠标下降,但我认为这些也会有效。此外,关键是我希望它自动显示。(

切勿调用CreateGraphics。如果要在控件上绘制,请处理该控件的Paint事件并使用提供的e.Graphics属性。如果图形需要更改,请将描述图形的数据存储在一个或多个字段中,然后读取Paint事件处理程序中的这些字段。如果需要强制更改图形,请修改这些字段,然后在控件上调用Invalidate。理想情况下,将一个参数传递给Invalidate方法,该方法描述已经或可能已经更改的最小区域。这是我和一个朋友早些时候准备的。

请注意,WinForms控件经常被绘制和重新绘制,因此在Paint事件处理程序之外完成的任何绘制都可能被擦除。这正是在你说不起作用的情况下发生的事情。这幅画正在画,但后来被擦掉了。通过在Paint事件处理程序中进行绘制,可以确保每次擦除时都会恢复该图形,使其看起来是永久的。

相关内容

  • 没有找到相关文章

最新更新