vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Picturebox.Paint und MSG Box stoppen Programm 
Autor: LesPaul
Datum: 05.03.22 15:05

Moin Forum,

Kann 100 Picture Boxen frei verschieben und zeichne gleichzeitig diverse in der Größe zu berechnende Umrandungen.
Gibt es einen Berechnungsfehler soll eine Meldung kommen und das weitere Verschieben verhindern. Alle Berechnungsfunktionen befinden sich im Original in "Private Sub picB_MouseM(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)", wo auch die Unterbrechnung stattfinden muss.

Nun zum Problem: sobald ich die MSGBox aufrufe hängt sich das Programm ohne Fehlermeldung auf. Ebenfalls ist danach der Aufruf der MSGBox in Button1 nicht mehr möglich.
Das Problem liegt in "Private Sub picZeichnung_Paint", ohne funktioniert alles.

Hier ein kurzes (sinnfreies) Beispiel mit dem selben Effekt.

Public Class Form1
    Dim DragFlag As Boolean
    Dim MemX As Integer, MemY As Integer
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For a As Integer = 0 To 3
            Dim mypic As New PictureBox
            picZeichnung.Controls.Add(mypic)
            With mypic
                .Name = "pic" & a + 1
                .Size = New Size(30, 30)
                .SizeMode = PictureBoxSizeMode.StretchImage
                .BorderStyle = BorderStyle.FixedSingle
                .BackColor = Color.Green
                .Top = a * 100
                .Left = 100
                .Cursor = Cursors.SizeAll
                .Visible = True
                AddHandler .Click, AddressOf picB_clicked
                AddHandler .MouseDown, AddressOf picB_MouseD
                AddHandler .MouseMove, AddressOf picB_MouseM
                AddHandler .MouseUp, AddressOf picB_MouseU
            End With
        Next
    End Sub
 
    Private Sub picB_clicked(ByVal sender As Object, ByVal e As Object)
 
        Dim mypic As PictureBox = CType(sender, PictureBox)
 
    End Sub
 
    Private Sub picB_MouseD(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs)
        Dim mypic As PictureBox = CType(sender, PictureBox)
 
        mypic.BringToFront()
        DragFlag = True : MemX = e.X : MemY = e.Y
 
    End Sub
 
    Private Sub picB_MouseM(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs)
        Dim mypic As PictureBox = CType(sender, PictureBox)
 
        If Not DragFlag Then Exit Sub
        mypic.Left = mypic.Left + (e.X - MemX)
        mypic.Top = mypic.Top + (e.Y - MemY)
 
        Dim iHalf As Long = picZeichnung.Width / 2
        If mypic.Left > iHalf Then
            mypic.BackColor = Color.Red
            mypic.left = 100
            MsgBox("Fehler")
            Exit Sub
        Else
            mypic.BackColor = Color.Green
        End If
    End Sub
 
    Private Sub picB_MouseU(ByVal sender As Object, ByVal e As _
      System.Windows.Forms.MouseEventArgs)
        Dim mypic As PictureBox = CType(sender, PictureBox)
        DragFlag = False
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
        MsgBox("Hallo")
    End Sub
 
    Private Sub picZeichnung_Click(sender As Object, e As EventArgs) Handles _
      picZeichnung.Click
 
    End Sub
 
    Private Sub picZeichnung_Paint(sender As Object, e As PaintEventArgs) _
      Handles picZeichnung.Paint
        For a As Integer = 1 To 3
            With picZeichnung.Controls("pic" & a)
                Dim iMitteH As Integer = .Left + (.Width / 2)
                Dim iMItteV As Integer = .Top + (.Height / 2)
 
                Using p As New Pen(Brushes.Green, 2)
                    e.Graphics.DrawLine(p, iMitteH - 30, iMItteV, iMitteH + 30, _
                      iMItteV)
                    e.Graphics.DrawLine(p, iMitteH, iMItteV - 30, iMitteH, _
                    iMItteV + 30)
                End Using
            End With
        Next
 
        picZeichnung.Refresh()
    End Sub
 
    Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles Me.Resize
        Me.Width = 500
        Me.Height = 400
        With picZeichnung
            .Width = 400
            .Height = 300
            .Top = 50
            .Left = 50
        End With
 
    End Sub
End Class
Hoffe jemand kann helfen, ich verstehe es nicht.

Vielen Dank!
Gruß, LesPaul
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Picturebox.Paint und MSG Box stoppen Programm 
Autor: sv00010
Datum: 05.03.22 15:33

picZeichnung.Refresh()
Versuche doch mal ob es auch ohne picZeichnung.Refresh() funktioniert.
Es könnte sein, dass dadurch eine Endlosscheife produziert wird.

Beitrag wurde zuletzt am 05.03.22 um 15:34:22 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Picturebox.Paint und MSG Box stoppen Programm 
Autor: LesPaul
Datum: 06.03.22 11:09

Hallo sv00010

die PictureBox muss ein Refresh haben, da sonst die Rahmen nur teilweise gezeichnet werden, und erhalten bleiben.
Wenn ich eine Picture Box verschiebe, muss der Rahmen mitwandern. Das Programm zeichnet letztendlich bis zu 100 Rahmen und noch weitere Icons welche es ermöglichen den gewählten Rahmen in der Größe zu verändern.

Gruß, LesPaul
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Picturebox.Paint und MSG Box stoppen Programm 
Autor: sv00010
Datum: 06.03.22 12:00

Du könntet dort wo die MsgBox("Fehler") aufgerufen wird, stattdessen einen Timer starten,
welcher sich beim aufgerufen worden sein, selber wieder abschaltet, sodass dieser nur einmal abgearbeitet wird.
Dort dann die MessageBox rein machen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Picturebox.Paint und MSG Box stoppen Programm 
Autor: LesPaul
Datum: 06.03.22 14:10

versucht, der Timer startet aber nicht ...
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Picturebox.Paint und MSG Box stoppen Programm 
Autor: Manfred X
Datum: 06.03.22 20:43

Hallo!

In einem Resize-Ereignis der Form darfst Du nicht die Größe der Form ändern.
Benutze die Eigenschaften MinimumSize/Maximumsize oder FormborderStyle.

Das Refresh in einemPaint-Event ist zu vermeiden.
Benutze die Invalidate-Methode in den Mouse-Events für den Bereich, der neu
gezeichnet werden muss.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Picturebox.Paint und MSG Box stoppen Programm 
Autor: LesPaul
Datum: 07.03.22 09:09

guten Morgen!

das funktioniert schon viel besser,
vor allem ruckelfreier und schneller.

Vielen Dank für den Tipp
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel