我正在尝试在图像上生成一组矩形。为此,我调用了一个存在于单独类中的方法(因为需要使用多种形式来调用此函数。)假设我有Form A和Form B都需要绘制上述一组矩形:
从Form A可以正常工作,从Form B可以不绘制任何内容,但是也不返回异常。
为确保没有遗漏任何内容,我尽可能地复制并粘贴了两种形式的函数调用,因此两者完全相同。我还三重检查了任何语义错误,但找不到任何错误。
从Form 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.");
}
}
侧面注:Rects是用户定义的矩形的列表。
预期结果是,在用户单击的位置,将出现一组矩形。但实际上,什么也没有出现。
该应用程序不返回任何类型的错误消息,并且通过使用断点和消息框,我已经能够验证该函数确实能够执行。
我希望任何人都能指出我这个问题的潜在解决方案。
非常感谢 〜梅尔文
答案 0 :(得分:0)
经过一番修补,我发现了以下解决方案:
实际上是在绘制矩形,但未在屏幕上显示。为了使矩形显示在屏幕上,我必须添加以下代码行:
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
}
}