在不同类别的图像上绘制矩形

时间:2019-05-29 09:42:25

标签: c# class graphics

我正在尝试在图像上生成一组矩形。为此,我调用了一个存在于单独类中的方法(因为需要使用多种形式来调用此函数。)假设我有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是用户定义的矩形的列表。

预期结果是,在用户单击的位置,将出现一组矩形。但实际上,什么也没有出现。

该应用程序不返回任何类型的错误消息,并且通过使用断点和消息框,我已经能够验证该函数确实能够执行。

我希望任何人都能指出我这个问题的潜在解决方案。

非常感谢 〜梅尔文

1 个答案:

答案 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
     }
 }