Member 11856456 Ответов: 1

Как нарисовать линии на форме, чтобы создать пользовательскую печатную форму.


Я работал над этим кодом:
Private Sub ABToolStripMenuItem_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles ABToolStripMenuItem.Paint


       Dim var As System.Drawing.Graphics
       var = Me.CreateGraphics
       Dim pen1 As Pen
       pen1 = New Pen(Color.Black, 1)

       'Horizontal line

       '1st moves the line further in, towards the middle.
       '2nd And 4th must be the same number And they bring the line down
       '3rd Is the length of the line

       'var.DrawLine(pen1, 50, 90, 600, 90)
       var.DrawLine(pen1, 50, 200, 600, 200)
       var.DrawLine(pen1, 50, 230, 600, 230)

       'Vertical line

       '1st And 3rd numbers must be the same number to keep the line straight
       '2nd move the position of the line inward
       '4th Is the vertical length

       var.DrawLine(pen1, 50, 200, 50, 1000)



   End Sub


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

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

Что я уже пробовал:

Попробовал переключиться на событие. click, но программа вылетает из-за выполнения paint eventargs с помощью щелчка.

1 Ответов

Рейтинг:
12

OriginalGriff

Прекрати это делать!
Вы не должны создавать графический контекст в своем событии Paint, вы должны использовать контекст, предоставленный в параметре PaintEventArgs.
И если вы создаете какие - либо объекты, связанные с графикой, особенно контексты, но также и ручки, вы несете ответственность за их утилизацию, когда закончите. Если вы этого не сделаете, то получите исключения из памяти, когда останется много памяти кучи. Сборщик Grabge не будет пытаться избавиться от этих элементов до тех пор, пока пространство кучи не станет коротким, а они являются очень скудным ресурсом.

И почему вы пытаетесь создать "пользовательскую печатную форму"? Используйте PrintDocument, и вы сможете точно контролировать, как выглядит ваша распечатка, без какой-либо ссылки на саму форму. Распечатки обычно не выглядят как формы, хотя бы потому, что вы не можете взаимодействовать с распечаткой, поэтому печатные кнопки, DDLs и т. д. не очень хороши и делают ваше приложение любительским.


Member 11856456

Грифф,

Честно говоря, я любитель кодирования. Я знаю, как я хочу, чтобы все выглядело, просто не знаю всех особенностей, чтобы сделать его более привлекательным или лучше с точки зрения программирования. В любом случае у меня не было возможности использовать какое-либо кодирование типа печатного документа. Можете ли вы нарисовать линии и ввести данные для заполнения формы для печати? Все, что я пытаюсь сделать, - это сделать бумажную форму (после распечатки), которая будет содержать конкретную информацию из обычая на листе. Смогу ли я сделать это с помощью печатного документа?

OriginalGriff

Да, на самом деле это не так уж сложно, хотя может выглядеть именно так, когда вы впервые попробуете. Но, поскольку вам нужна только одна страница, большая сложность уходит в окно.
В принципе, вы сами решаете, что именно вы хотите на бумаге и где, и он делает всю работу - вы просто работаете с координатами на бумаге. Установите драйвер печати PDF writer в свою систему-Google найдет его для вас - чтобы сохранить бумагу и попробовать пример по ссылке. По крайней мере, он покажет вам основы.

Member 11856456

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

OriginalGriff

"есть ли более быстрый способ судить о точках на печатном документе?"
Я не понимаю, что вы имеете в виду - пожалуйста, объясните подробнее.

"как я могу настроить печатный документ для каждого типа печати, который я хотел бы сделать?"
Либо используйте другой PrintPageEventHandler для каждого типа печати, либо имейте метод для каждого другого типа печати и вызывайте соответствующий из вашего единственного обработчика. (Есть "лучший" способ, который включает в себя вывод классов из PrintDocument и предоставление системе возможности разобраться в них, но это довольно продвинутый материал, и я не думаю, что вам, как новичку, нужно еще разбираться в этом).
Я бы, наверное, просто придерживался другого метода PrintPageEventHandler для каждого типа - он прост и понятен.