Je laatst getekende lineshape "deleten"...

Pagina: 1
Acties:
  • 335 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MasterTweaker
  • Registratie: Maart 2010
  • Laatst online: 12-09 18:01
Ik heb een simpel stukje code waarmee ik een lijn/ vierkantje / of een cirkel op een formulier kan tekenen:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Imports Microsoft.VisualBasic.PowerPacks


Public Class Form1
    Dim x As Integer
    Dim y As Integer
    Dim x1 As Integer
    Dim y1 As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        DrawRectangle()
        DrawCircle()
        DrawLine()
    End Sub

    Private Sub DrawRectangle()
        Dim canvas As New Microsoft.VisualBasic.PowerPacks.ShapeContainer
        Dim rect1 As New Microsoft.VisualBasic.PowerPacks.RectangleShape
        ' Set the form as the parent of the ShapeContainer.
        canvas.Parent = Me
        ' Set the ShapeContainer as the parent of the RectangleShape.
        rect1.Parent = canvas
        ' Set the location and size of the rectangle.
        rect1.Left = 10
        rect1.Top = 10
        rect1.Width = 300
        rect1.Height = 100
    End Sub

    Private Sub DrawCircle()
        Dim canvas As New ShapeContainer
        ' To draw an oval, substitute 
        ' OvalShape for RectangleShape.
        Dim theShape As New OvalShape
        ' Set the form as the parent of the ShapeContainer.
        canvas.Parent = Me
        ' Set the ShapeContainer as the parent of the Shape.
        theShape.Parent = canvas
        ' Set the size of the shape.
        theShape.Size = New System.Drawing.Size(200, 300)
        ' Set the location of the shape.
        theShape.Location = New System.Drawing.Point(100, 100)
        ' To draw a rounded rectangle, add the following code:
    End Sub

    Private Sub DrawLine()
        Dim canvas As New ShapeContainer
        Dim theLine As New LineShape
        
        ' Set the form as the parent of the ShapeContainer.
        canvas.Parent = Me
        ' Set the ShapeContainer as the parent of the LineShape.
        theLine.Parent = canvas
        ' Set the starting and ending coordinates for the line.
        theLine.StartPoint = New System.Drawing.Point(x, y)
        theLine.EndPoint = New System.Drawing.Point(x1, y1)
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        x = TextBox1.Text
        y = TextBox2.Text

        x1 = TextBox3.Text
        y1 = TextBox4.Text

        DrawLine()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    End Sub
End Class



Maar nu vraag ik mij of hoe ik de laatst getekende lijn ( Of ander figuur ) verwijder? Dus niet alle lijnen maar alleen de laatst getekende lijn. Ik weet wel hoe ik alles verwijder, maar goed dat wil ik dus niet.
Heeft iemand een idee hoe je dat snel doet? :)

[ Voor 0% gewijzigd door NMe op 08-04-2010 14:40 ]


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Wat heb je zelf al bedacht om dit uit te voeren en wat lukt er niet aan? Het is niet de bedoeling dat je hier gewoon je code dumpt en verwacht dat wij de oplossing voor jou gaan zitten uitkauwen.

Dus laat een klein stukje relevante code zien, vertel wat je als oplossing bedacht had, en vertel waarom dat niet wilde lukken.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 10:08

Haan

dotnetter

Mijn naïeve idee, zou zijn om iedere laatste draw te onthouden, dan kan je die 'verwijderen' door opnieuw te drawen, maar dan in dezelfde kleur als de achtergrond. Dan krijg je waarschijnlijk wel een probleem als dat overlapt met eerder getekende lijnen.
Of je onthoudt gewoon de hele vorige state van je canvas, dan kan je die opnieuw tekenen zonder de laatste draw, en heb je effectief het laatst getekende item verwijderd.

Maar waarschijnlijk zijn hier wel standaard oplossingen voor, ik zou eens proberen uit te zoeken hoe bijv. Paint dat doet, of je duikt in de source van Paint.Net :P

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Xiphalon
  • Registratie: Juni 2001
  • Laatst online: 14:37
Als je het Command Pattern gebruikt, kan je goed undo-functionaliteit maken.

Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Ligt helemaal aan je definiet van "Snel"

Snel te programmeren? Onthoud een(1) bitmap snapshot van voor de vorige draw, kun je 1 undo actie doen.

Als je meerdere undo acties wilt bijhouden zul je dit moeten optimaliseren omdat je anders al gauw teveel geheugen gaat gebruiken waardoor het "langzaam" voor de gebruiker wordt.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Lijst bijhouden met getekende shapes zodat je deze kunt undo-en? Kan je zelf wel opkomen toch?

https://niels.nu


Acties:
  • 0 Henk 'm!

  • MasterTweaker
  • Registratie: Maart 2010
  • Laatst online: 12-09 18:01
Even nog een klein ander vraagje. Is het gebruikelijk dat je als teken achtergrond een Panel gebruikt of gebruik je hier altijd een picturebox voor?

Acties:
  • 0 Henk 'm!

  • MasterTweaker
  • Registratie: Maart 2010
  • Laatst online: 12-09 18:01
Hydra schreef op donderdag 08 april 2010 @ 15:04:
Lijst bijhouden met getekende shapes zodat je deze kunt undo-en? Kan je zelf wel opkomen toch?
Je bedoelt een array met objects. En dat dan elke lineshape een object vormt?

Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
MasterTweaker schreef op donderdag 08 april 2010 @ 15:06:
Even nog een klein ander vraagje. Is het gebruikelijk dat je als teken achtergrond een Panel gebruikt of gebruik je hier altijd een picturebox voor?
Een picturebox is een control specifiek voor het tonen van images. Die functionaliteit heb je niet nodig dus kun je net zo goed een panel gebruiken.
MasterTweaker schreef op donderdag 08 april 2010 @ 15:07:
Je bedoelt een array met objects. En dat dan elke lineshape een object vormt?
Ja. Ik zou overigens gewoon een arraylist oid gebruiken.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
MasterTweaker schreef op donderdag 08 april 2010 @ 15:06:
Even nog een klein ander vraagje. Is het gebruikelijk dat je als teken achtergrond een Panel gebruikt of gebruik je hier altijd een picturebox voor?
Het was de bedoeling dat je wat meer input zou geven aan het topic, en dus zeker niet de bedoeling om nog maar een andere vraag te stellen zonder dat je zelf wat inzet toont.
Woy schreef op donderdag 08 april 2010 @ 14:25:
Wat heb je zelf al bedacht om dit uit te voeren en wat lukt er niet aan? Het is niet de bedoeling dat je hier gewoon je code dumpt en verwacht dat wij de oplossing voor jou gaan zitten uitkauwen.

Dus laat een klein stukje relevante code zien, vertel wat je als oplossing bedacht had, en vertel waarom dat niet wilde lukken.
Maar op deze manier past dit topic niet binnen de richtlijnen van PRG en dus gaat hij op slot.

[ Voor 28% gewijzigd door Woy op 08-04-2010 15:22 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1

Dit topic is gesloten.