vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 
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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Picturebox.Paint und MSG Box stoppen Programm152LesPaul05.03.22 15:05
Re: Picturebox.Paint und MSG Box stoppen Programm77sv0001005.03.22 15:33
Re: Picturebox.Paint und MSG Box stoppen Programm70LesPaul06.03.22 11:09
Re: Picturebox.Paint und MSG Box stoppen Programm73sv0001006.03.22 12:00
Re: Picturebox.Paint und MSG Box stoppen Programm62LesPaul06.03.22 14:10
Re: Picturebox.Paint und MSG Box stoppen Programm65Manfred X06.03.22 20:43
Re: Picturebox.Paint und MSG Box stoppen Programm56LesPaul07.03.22 09:09

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-2022 [email protected] 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