我正在尝试在图像上生成一组矩形。为了实现这一点,我调用了一个存在于单独类中的方法(因为多个窗体需要调用此函数。假设我有表单 A 和表单 B,它们都需要绘制上述矩形集:
从表单 A 中它工作正常,从表单 B 它不会绘制任何内容,但它也不会返回异常。
为了确保我没有错过任何东西,我甚至从两个窗体复制并粘贴函数调用,以便它们两个相同。我还三重检查了任何语义错误,但找不到任何语义错误。
表单 A 的函数调用如下所示:
private void PbPreview_Click(object sender, EventArgs e)
{
if (NewPage) //This bool is true when the user is displaying a new page(Image)
{
StartingY = MousePosition.Y - 76; //Save the Y position of the click in a float variable
Form1.MainController.DrawRect(StartingY, PbPreview.Image); //Function call
NewPage = false; //Set the new Page bool to false to prevent overdrawing
}
}
表单 B 的函数调用如下所示:
private void PbFactuur_Click(object sender, EventArgs e)
{
if (NewPage) //Same use as the NewPage bool from above
{
MouseY = MousePosition.Y - 76; //Saving mouse position
Form1.MainController.DrawRect(MouseY, PbFactuur.Image); //Function call
NewPage = false; //Set new page to false to prevent overdrawing
MessageBox.Show("I have executed the function"); //Debug info
}
}
下面是函数中存在的代码:
public void DrawRect(float Ypos, Image DrawSubject)
{
try
{
foreach (Rectangle R in Form1.nieuwBedrijf.Rects)
{
Rectangle TempRect = R;
TempRect.Y = Convert.ToInt32(Ypos);
Graphics G = Graphics.FromImage(DrawSubject);
G.DrawRectangle(Pens.Black, TempRect.X * Form1.nieuwBedrijf.ScaleX, TempRect.Y * Form1.nieuwBedrijf.ScaleY, TempRect.Width * Form1.nieuwBedrijf.ScaleX, 1920);
}
}
catch
{
MessageBox.Show("No rectangles have been defined yet.");
}
}
旁注:矩形是用户定义的矩形列表。
预期的结果是在用户单击的位置,将显示一组矩形。但实际上,什么都没有出现。
该应用程序不会返回任何类型的错误消息,并且通过使用断点和消息框,我已经能够验证该函数是否确实执行。
我希望任何人都能指出我解决这个问题的潜在解决方案。
提前非常感谢 ~梅尔文
经过一番修补,我找到了以下解决方案:
矩形实际上是在绘制,但没有显示在屏幕上。为了让矩形显示在屏幕上,我必须添加以下代码行:
private void PbFactuur_Click(object sender, EventArgs e)
{
if (NewPage) //Same use as the NewPage bool from above
{
MouseY = MousePosition.Y - 76; //Saving mouse position
Form1.MainController.DrawRect(MouseY, PbFactuur.Image); //Function call
NewPage = false; //Set new page to false to prevent overdrawing
MessageBox.Show("I have executed the function"); //Debug info
Refresh();//<----- This line fixed the problem
}
}