GDI+ Problem Bild zeichnen!

  • VB.NET

Es gibt 39 Antworten in diesem Thema. Der letzte Beitrag () ist von skyscater.

    GDI+ Problem Bild zeichnen!

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. CreateGraphics.DrawImage(My.Resources.burgfried, New Point(New Point(411, 267)))
    3. End Sub


    Was ist an diesem Code falsch?
    Die Form ist nach dem ausführen des Codes immer noch leer?

    Mfg
    Ok habe das alte Problem gefixt...

    Neues Problem:

    VB.NET-Quellcode

    1. Private Sub Panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
    2. Panel1.CreateGraphics.DrawImage(My.Resources.steinwall, New Point(New Point(e.Location.X, e.Location.Y)))
    3. End Sub


    Er zeichnet das Bild nicht...

    Mfg
    Würd ich ebenfalls im Paintevent machen diesmal hald im paintevent vom panel.
    Dann brauchst aber ne variable die dir sagt ob der cursor gerade im feld ist die kannst wenn er drin is auf true und sonst auf false setzten.
    Und im paintevent das bild eben nur dann malen wenn die variable auf true is
    und bei panel1_mouse down noch
    panel1.invalidate()
    reinschreiben. (löst das neu zeichnen des panels aus somit auch das paintevent)
    mfg.skyscater
    Also es ist ein Haus in der Mitte mit GDI+ das wird schon im Panel1_Paint Event gezeichnet nun wenn ich den Code neu ausführe ist nur der neue Steinwall da.... Code:

    Panel1_Paint
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
    2. Panel1.CreateGraphics.DrawImage(My.Resources.burgfried, New Point(New Point(411, 267)))
    3. If steinwallklick = "True" Then
    4. Panel1.CreateGraphics.DrawImage(My.Resources.steinwall, New Point(New Point(MousePosition)))
    5. steinwallklick = "False"
    6. Else
    7. End If
    8. End Sub




    Klick auf Panel1:
    Spoiler anzeigen

    Klick und tool = "steinwall"
    steinwallklick = "true"

    VB.NET-Quellcode

    1. Private Sub Panel1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseDown
    2. If tool = "steinwall" Then
    3. steinwallklick = "True"
    4. Panel1.Invalidate()
    5. End If
    6. End Sub


    Jetzt überzeichnet er die Steinwand d.h die vorherige ist immer wieder weg somit kann man keinen "Weg" bauen da immer die vorherige weg ist ....

    Mfg
    ich hoffe ich evrsteh dich richtig.
    also:
    du klickst auf das pannel und es soll dort wo gecklickt wurde ein steinwall erscheinen wenn man nochmal aufs pannel klickt soll wieder an der klickposition ein steinwall erscheinen und der alte aber beibehalten werden. richtig?
    ok.
    dann brauchst ne globale variable:

    VB.NET-Quellcode

    1. dim WallPunkte as list(of point)

    Hier wird eine liste (zur zeit noch leer) mit den punkten de5r zu zeichnenden Steinwälle erstellt.

    dann bei panel.click:

    VB.NET-Quellcode

    1. If tool = "steinwall" Then
    2. WallPunkte.add(new point(mouseposition))
    3. steinwallklick = "True"
    4. Panel1.Invalidate()
    5. End If

    Wenn jetzt gecklickt wird wird die mausposition (dann der punkt für den steinwall) in der liste gespeichert.

    bei panel1 paint dann:

    VB.NET-Quellcode

    1. Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Panel1.Paint
    2. dim gr as graphics = e.graphics
    3. gr.DrawImage(My.Resources.burgfried, New Point(411, 267))
    4. If steinwallklick = "True" Then
    5. for each item as point in WallPunkte
    6. gr.DrawImage(My.Resources.steinwall,item)
    7. steinwallklick = "False"
    8. next
    9. Else
    10. End If
    11. End Sub

    Also: ich erstelle ein graphics-objekt gr aus e.graphics (dann musst nicht jedesmal creategraphics benutzen).
    Warumm hast du die new point anweisungen geschachtelt ???? :/
    wenn steinwallklick true ist wird eben die liste WallPunkte ausgelesen und alle Steinwälle mit deren Punkten gezeichnet.

    habs jetzt nicht ausprobiert also wenn noch fragen offen sind -> fragen ;)
    mfg.skyscater
    1. Fehler: (Panel 1 Klick)

    VB.NET-Quellcode

    1. If tool = "steinwall" Then
    2. SteinWallPunkte.Add(New Point(PictureBox1.Location)) 'Hier ist der Fehler markiert!
    3. steinwallklick = "True"
    4. Panel1.Invalidate()
    5. End If

    -> Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Was nun?
    Meinst du das?:
    Eine Ausnahme (erste Chance) des Typs "System.NullReferenceException" ist in 0.1a.exe aufgetreten.

    oder das:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. System.NullReferenceException wurde nicht behandelt.
    2. Message=Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    3. Source=0.1a
    4. StackTrace:
    5. bei WindowsApplication1.Form1.PictureBox1_Click(Object sender, EventArgs e) in D:\Dokumente und Einstellungen\Dominic Poppe\Desktop\Strong-2d-Hold\0.1a\0.1a\Form1.vb:Zeile 46.
    6. bei System.Windows.Forms.Control.OnClick(EventArgs e)
    7. bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    8. bei System.Windows.Forms.Control.WndProc(Message& m)
    9. bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    10. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    11. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    12. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    13. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
    14. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    15. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    16. bei System.Windows.Forms.Application.Run(ApplicationContext context)
    17. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    18. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    19. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    20. bei WindowsApplication1.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    21. bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    22. bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    23. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    24. bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    25. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    26. bei System.Threading.ThreadHelper.ThreadStart()
    27. InnerException:


    Mfg
    nein meinte was anderes aber villeicht gibts das nur in der professionalversion :/
    naja es is in der zeile iregend ein objekt nothing, welches und woran es liegt kann ich dir gerade so leider nicht sagen :/
    Du könntest nur das projekt anhängen, und ich sehs mir an, oder du findest ihn selbst ^^
    mfg.skyscater