Grafiken werden abgeschnitten

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.

    Grafiken werden abgeschnitten

    Hallo Community,

    ich arbeite mich gerade durch das OpenBook Visual Basic 2010 Express von Galileo Press durch und experimentiere nebenher noch ein bisschen. Nun habe ich ein Problem, dass Grafiken (bzw. auch Texte mit DrawString) in der Hauptform abgeschnitten werden. Im Text steht nichts von einer Deklaration der Form (Zitat: "Die Methode CreateGraphics() liefert einen Verweis auf das Graphics-Objekt des Formulars. Es kann nun im gesamten Formular mithilfe der Variablen z auf die Zeichenfläche des Formulars zugegriffen werden."). Dem ist aber leider nicht so und ich finde hier bei Euch auch keine Lösung dafür. Als Beispiel dienen hier Datum-Strings als Picturebox Beschriftungen, die an der roten Box (Markierung für Euch) abgeschnitten werden. In meinem zweiten Projekt habe ich ein Fenster erstellt, in der durch eine einfache Mausabfrage mit einem Stift auf einem Touchpanel gemalt werden kann. Hier sieht man ebenfalls, dass die Malfläche begrenzt ist, obwohl ich dies nirgendwo festgelegt habe.

    Wo ist das Problem?

    Danke und Gruß, Myxin
    Bilder
    • Grafikfehler.jpg

      38,22 kB, 397×230, 122 mal angesehen
    • touchscreenfehler.jpg

      93,23 kB, 861×550, 109 mal angesehen
    OK, dachte ich auch zuerst, aber wenn dem so ist, wo finde ich die möglichen Einstellungen. In der Form bin ich alle Eigenschaften durchgegangen, hat aber alles keine Besserung gebracht. Andere User müssten ebenfalls das Problem haben, wenn Sie mit Grafiken experimentieren, dem scheint aber nicht so zu sein. Daher gehe ich davon aus, dass der Fehler irgendwo zwischen meinen Ohren liegt.
    Bitteschön:

    VB.NET-Quellcode

    1. Public Class frmMain
    2. Dim z As Graphics = CreateGraphics()
    3. Dim schriftart As New Font("Arial", 16)
    4. Dim stift As New SolidBrush(Color.Black)
    5. Dim datum As Date
    6. Dim davor As Date
    7. Dim danach As Date
    8. Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. datum = Date.Today
    10. davor = datum.AddDays(-1)
    11. danach = datum.AddDays(1)
    12. Me.Visible = True
    13. z.DrawString(davor, schriftart, stift, 0, 10)
    14. z.DrawString(datum, schriftart, stift, 120, 10)
    15. z.DrawString(danach, schriftart, stift, 240, 10)
    16. 'MsgBox("Gestern=" & davor & " Heute=" & datum & " morgen=" & danach)
    17. Me.Close()
    18. End Sub
    Also, ich hab deinen Code mal ausprobiert und das funktionierte bei mir perfekt. Kann es sein das du die Größe verändert hast oder einen Teil aus dem "Bildschirm geschoben" hast?
    Bilder
    • Unbenannt.PNG

      6,37 kB, 376×79, 105 mal angesehen
    weg mit dem Code...
    Visible = True -> Show
    aber wenn, dann ins Shown Event...wobei nichtmal dort...

    CreateGraphics ist böse...->verwende das Paint Event und zeichne mit e.Graphics und dein Problem ist gelöst...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    weg mit dem Code...
    Visible = True -> Show
    aber wenn, dann ins Shown Event...wobei nichtmal dort...
    Hmm, kann ich im ersten Moment nix mit anfangen, was Du da meinst.

    Ich weiß, dass das Paint Event besser ist (wegen Aktualisieren und so). Mir geht es jetzt mehr darum, warum es bei Anderen läuft und bei mir nicht. Ich habe keine Einstellungen o.ä. geändert, einfach eine Form erstellt und direkt versucht, in ihr zu Zeichnen. Kann es sein, dass es an Windows 7 HP (64bit) liegt? @Annonator, welches BS hast Du?
    Ich denke eher, dass es daran liegt, das du im Load-Event zeichnest. Schmeiß den ganzen Kram vielleicht ma in ein Button_Click. Nach dem Load wird nähmlich oft noch einiges anderes gemalt und das Paint-Event aufgerufen, die benutzerdefinierte Größe der Form angepasst usw.
    Deshalb IMMER im Paint zeichnen (Aufruf mit Invalidate()) und bei Größenänderungen im Load ResizeRedraw auf True.
    Viel Vreude
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Deshalb IMMER im Paint zeichnen (Aufruf mit Invalidate()) und bei Größenänderungen im Load ResizeRedraw auf True.
    das meinte ich, nichts mit Labeln...und ich meinte auch, lieber im Shown Event, aber auch dort sollte es nicht rein,...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    zu zeichnen ist besser als ein Control, also performanter...
    CreatGraphics ist auch nicht allzu ellegant, ganz besonders nicht, wenn man es nicht im PaintEvent o.ä. verwendet, da das ganze dann von anderen dingen überzeichnet werden kann, was ja nicht der Fall sein soll, hier wird das GraphicsObjekt autom. generiert und nur, wenn es auch wirklich benötigt wird...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---