Правильный способ сделать это вряд ли когда-либо с CreateGraphics
. Это приведет к тому, что не сохранится. Когда область недействительна, например, форма минимизирована или другая форма/приложение перетаскивается по ней, ваши фигуры исчезнут.
Вы должны также включить Option Strict
. В коде есть многочисленные ошибки типа. Например, нет конструктора Rectangle
, который занимает Decimal
. Это даже не правильный класс для нецелых чисел, но RectangleF
не принимает десятичное значение.
Ядро проблема состоит в том, что форма показана в конце события загрузки формы. Итак, ваш код работает/рисуется до того, как форма видна, и ничего не отображается. Даже если форма была уже показана, все, что вы рисуете, не будет сохранено, если пользователь минимизирует форму или переместит другое окно через нее.
' form level list to store the data
Private XY As New List(Of PointF) ' pts
Тогда в случае загрузки формы, читать данные и добавить в список
For Each line As String In System.IO.File.ReadAllLines("...")
If line.Contains("<POS>") = True Then
Dim tagless As String = StripTags(line)
' c required under Option Strict
Dim parts As String() = tagless.Split(New Char() {","c})
' convert values to single. create a PointF
Dim ptF As New PointF(Convert.ToSingle(parts(0)), Convert.ToSingle(parts(1)))
' add to list
XY.Add(ptF)
End If
Next
Следующая вещь, которая происходит должна быть форма показывается и событие краски вызывается. Эти данные используются в Paint Событие:
Dim rectF As RectangleF
Using myB As New SolidBrush(Color.FromArgb(128, Color.Red))
For Each ptF As PointF In XY
rectF = New RectangleF(ptF.X - 35, ptF.Y - 35,
70, 70)
e.Graphics.FillEllipse(myB, rectF)
Next
End Using
Если у вас есть другой код, чтобы добавить данные указывают, как кнопки мыши, после добавления, изменения или удаления данных, используйте Invalidate
, чтобы заставить перерисовать: Me.Invaludate()
это вы обращаются к форме, или PictureBox1.Invalidate()
, если вы рисуете над элементом управления.
Урок состоит в том, что теперь, каждый раз, когда необходимо перекрасить форму, ваши фигуры также будут перерисовываться.
У вас есть ошибка? Что происходит? Материал, который вы нарисовываете, не будет сохраняться таким образом: перетащите что-то по форме или скройте, и оно исчезнет. – Plutonix
*** какие ошибки вы получаете, если есть? *** Где он не работает? – Codexer
Вы должны сделать весь свой рисунок в событии рисования формы. При загрузке формы форма по-прежнему загружается, и, таким образом, будет существовать краска даже после загрузки, которая удалит все вычеркнутые символы. –