Selbstgezeichnete Objekte in Panel Zoomen und Scrollen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Selbstgezeichnete Objekte in Panel Zoomen und Scrollen

    Hallo Zusammen,

    bin für mein Programm gerade bisschen am Testen und habe kaum Ahnung von grafischen Erstellungen.

    Zu meiner Überlegung was ich machen will:

    Ich möchte Rechtecke und Linien untereinander und nebeneinander zeichnen lassen.
    Eigentliche Datenquelle ist ein Structure mit verschiedenen Daten (denke für die Thematik hier unrelevant).

    In meinem Test zeichne ich einfach 5 Rechtecke mit festem Abstand untereinander. Da mein y größer ist als mein Panel in das ich Zeichne, müsste ich dieses Scrollen können habe das auch schon mit AutoScroll probiert tut aber nicht 8| , denke das liegt einfach an falscher Benutzung/fehlender Kenntnisse vielleicht hat da jemand einen Tipp.

    Ausserdem würde ich gerne hinein und herauszoomen einfach mit zwei buttons + - möchte aber keine Faktoren in jede Zeile in der ich zeichne einbinden wollen, da ich recht viele verschiedene grafische Objekte habe.


    VB.NET-Quellcode

    1. Imports System.Drawing.Drawing2D
    2. Public Class Form1
    3. Public Grafik As Graphics
    4. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    5. Dim i As Integer = 0
    6. Do While Not i = 250
    7. Grafik = Graf1.CreateGraphics
    8. Grafik.DrawRectangle(Pens.Black, 20, 20 + i, 100, 30)
    9. i = i + 50
    10. Loop
    11. End Sub
    12. End Class


    Zum Code: Graf1 ist ein Panel

    Für ein paar Tipps wäre ich dankbar. :)
    Danke für die schnelle Antwort.

    Zu dem Tipp mit der Schleife, das ist hier nicht wirklich relevant wie die Schleife aufgebaut ist, im echten Programm kommt die Bedingung nicht vom i sondern aus dem Structure.


    Habe das jetzt abgeändert, verändert aber nichts an der Gesamtsituation.

    VB.NET-Quellcode

    1. Imports System.Drawing.Drawing2D
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. AddHandler Graf1.Paint, AddressOf Me.Graf1_Paint
    5. End Sub
    6. Private Sub Graf1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs)
    7. Dim i As Integer = 0
    8. Do While Not i = 250
    9. e.Graphics.DrawRectangle(Pens.Black, 20, 20 + i, 100, 30)
    10. i = i + 50
    11. Loop
    12. End Sub
    13. End Class

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Somero“ ()

    Einfach klingt gut :) werde ich ausprobieren

    Naja das mit Zoom Faktor wollte ich ja nicht das wäre ja dann:

    VB.NET-Quellcode

    1. dim z as integer = textbox.text
    2. e.Graphics.DrawRectangle(Pens.Black, 20, 20 + i, 100*z, 30*z)

    oder gibts da noch andere Möglichkeiten?

    und was mach ich mit meinem Scrollproblem?
    es gäbe da noch eine Möglichkeit:
    c) Zeichne deine Linien auf ein GraphicsPath. Den GraphicsPath kannst du dann skaliert auf dein e.Graphics-Objekt zeichnen

    Zum Thema Scrollproblem:
    Man nehme zwei Panel. Man legt ein Panel auf das andere und setzt von dem unteren Panel die Eigenschaft .autoscroll auf true. Nun musst du nur noch an geeigneter Stelle (also nicht ständig) berechnen, wie groß das Panel OHNE Autoscroll sein soll. Den rest tut das AutoScroll-Panel von alleine. Zeichnen tust du also auf das Panel ohne Autoscroll.

    lg