Рисование прямоугольников на изображении из другого класса - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать набор прямоугольников на изображении. Чтобы достичь этого, я вызываю метод, который присутствует в отдельном классе (потому что несколько форм должны вызывать эту функцию.) Допустим, у меня есть форма 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.");
     }
 }

Sidenote: Rects - это список пользовательских прямоугольников.

Ожидаемым результатом будет то, что в месте, где пользователь нажимает, появится набор прямоугольников. Но на самом деле ничего не появляется вообще.

Приложение не возвращает никаких сообщений об ошибках, и с помощью точек останова и ящиков сообщений я смог убедиться, что функция действительно выполняется.

Надеюсь, кто-нибудь сможет указать мне на потенциальное решение этой проблемы.

Большое спасибо заранее ~ Melvin

1 Ответ

0 голосов
/ 29 мая 2019

После некоторого возни я нашел следующее решение:

Прямоугольники на самом деле рисовались, но не отображались на экране. Чтобы прямоугольники отображались на экране, мне пришлось добавить следующую строку кода:

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
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...