drawline arbeitet nur manchmal

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Snkae3000.

    drawline arbeitet nur manchmal

    Hallo Gemeinde,

    recht neu im Umgang mit VB.net und der OOP auch nicht so angetan kämpfe ich da gerade mit meinem Problemchen.

    Aus einer userform1 rufe ich mit einem button eine userform2 auf. Darin male ich mit drawline ein wenig rum, positioniere labels um ein diagram zu erstellen.
    Während der Entwicklung habe ich das Ganze in ein button_click der userform2 gelegt.
    Funktioniert einwandfrei und sieht schön aus.

    Nun mag ich das Ganze sofort sehen wenn die userform2 über den button aus der userform1 mit Show aufgerufen wird.
    Geht nicht...

    Ich habe folgendes probiert.

    -meinen Code in userform2_load gelegt
    Ergebnis: alle labels werden einwandfrei positioniert, aber alle drawlines werden einfach nicht dargestellt

    -meinen Code in eine Sub gelegt und diese in form2_load aufgerufen
    Ergebnis: das gleiche

    -alles gelassen wie es ist und mit einem performclick den button_click in der form2 simuliert
    Ergebnis: auch wieder das Selbe

    Alle labels sind da wo sie hinsollen, nur die Linien fehlen. Klicke ich mit der Maus auf den Button werden die Linien gemalt.

    Es gibt einen Programmabbruch, keine Fehlermeldung nichts...

    Alle Befehle werden auch beim debuggen ohne Fehler durchgeführt. Nur leider sieht man keine Linien.

    Ich werde noch wahnsinnig. Was habe ich da übersehen???

    Beste Grüsse an euch Alle und meinen Dank im voraus.....
    mit drawline kann man unendlich viel falsch machen, daher - ohne deinen Code zu sehen - können wir dir wohl kaum sagen, was du falsch machst.
    Ich bin mir nichtmal sicher, ob du und ich unter "drawline" dasselbe verstehen (Ich verstehe darunter Graphics.DrawLine() - mag sein, dasses im vb6-Kompatiblitäts-Ranz ein weiteres "drawline" gibt).

    Wiedemauchsei - Dein Thema - eigene Zeichnungen anzeigen - heisst im FachChinesisch "Ownerdrawing". Dazu gibts einige ungewöhnliche, aber listenreiche Konzepte in .Net-WinForms, die man wissen muss, sonst kann kaum was vernünftiges bei rauskommen.
    Einen Mini-Abriss + Beispiel-Anwendung findeste hier: activevb.de/cgi-bin/tippupload…beweglicher_Figur_darstel

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

    Viel falsch machen kann man sicherlich immer. :)
    Ja, wir reden da, denke ich, über das gleiche drawline…..

    Imports System.Drawing.Graphics gemacht
    Dim dia As Graphics = CreateGraphics() vereinbart in der Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click und mit
    dia.DrawLine(Pens.Black, sexsbase, i, sexsbase - 20, i) lustig in der form herumgemalt

    das funktioniert ja auch soweit... und sieht gut aus...

    Allerdings nur wenn ich, zur Laufzeit, nach dem Form2.Show() auf den oben genannten button1 in der form2 mit der Maus klicke.
    Dann sieht man alle gemalten Linien... ich mag es aber gerne sofort nach Form2.Show() sehen wollen.

    Warum funzt es wenn ich auf den button klicke, aber nicht wenn der gleiche Code in der
    Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    steht???
    und auch nicht wenn ich, als andere Moeglichkeit, mit Button1.PerformClick() den klick force???
    und ebenso nicht wenn ich den ganzen Code in eine Sub verpacke und die beim form3_load aufrufe???

    Es wird jedesmal ohne Fehler abgearbeitet und alles andere, wie die Positionierung von labels, wird korrekt dargestellt, allein die mit drawline gezeichneten Linien fehlen dann.

    Ich verstehe es nicht. Es mag sein das mir da fundiertes Hintergrundwissen über objektorientierte Programmierung fehlt, bin halt eher prozedural Orientiert.
    Aber logisch ist es nicht wenn ein Codesegment bei einem button click Ereignis funktioniert, aber bei einem form load nicht, oder?

    Macht mir echt eine schlaflose Nacht......
    Wie gesagt: Ownerdrawing ist ein eigentümliches, aber äusserst schlaues Konzept.
    Das kannst du nicht verstehen, wenn du's dir nicht erklären lässt. Dazu hab ich dir einen Link gegeben - wenn du verstehen willst - setz dich damit auseinander.
    Also lies das, lade den dort gegebenen Code runter und probier ihn aus, stell bei Problemen jedweder Art gezielte Nachfragen.

    Hier nur deine Ratlosigkeit im Kreise zu drehen bringt dich nicht voran.

    (Übrigens: Mit CreateGraphics() vorzugehen ist schomal der erste Fehler - Ownerdrawing findet im Paint-Event statt, mit dem Graphics, was einem dort gegeben wird - nur damit - kein anderes!)

    Oder nimm dieses Tut - OwnerDrawing
    Aber langsam - erstmal nur frmDrawSimple betrachten und verstehen.
    Weil späterhin steigt es ziemlich ein in die vielen Möglichkeiten des Konzeptes.

    PS: Ich würde OwnerDrawing übrigens nicht als "fundiertes Hintergrundwissen" bezeichnen, sondern es ist ein Spezialgebiet - die meisten Programme kommen ohne aus.
    "Fundiertes Hintergrundwissen" - ich rede lieber von "Grundlagen" sind aber dennoch unerlässlich, ohne die bringt man garnix zustande - auf keinem Gebiet.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @Snkae3000 Willkommen im Forum. :thumbup:
    Das Problem liegt darin, dass Du den Code aus der Button_Click in die Form_Load verschoben hast.
    Bei einer Button_Click ist die Form stets sichtbar, bei der Form_Load nicht. Das letzte Event unmittelbar vor dem Sichtbarwerden der Form ist das Form_Shown-Event.
    Wenn Du im Paint-Event arbeitest, sollte alles sofort funktionieren.
    Mach es also so, wie vom @ErfinderDesRades geraten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo zusammen,
    zunächst meinen vielen lieben Dank für die Begrüssung und die flotte Unterstützung.

    @Rod, das war der notwendige Schubs in die richtige Richtung. Augenscheinlich funzt es nun mit dem Code im Paint Ereignis.

    @ErfinderDesRades auch Dir vielen Dank für die Infos und links. Du hast recht, in dieses Spezialgebiet kann man recht tief eintauchen. Für mein eher popeliges Problemchen bin ich im Moment glücklich. Aber gut zu wissen wo ich mich aufschlauen kann wenn es mal komplexer wird.

    Jetzt muss ich nur noch hier den "erledigt" Knopf finden. :)

    Euch allen noch einen schönen Sonntag.