Pohyblivá čára v pictureboxu   zodpovězená otázka

VB.NET

Prosím o pomoc,

mám picturebox, v něm je programově načtený obrázek.

Potřeboval bych do tohoto pictureboxu programově vložit černou čáru - lineshape (?) (aby byla vždy nahoře), kterou by bylo možné myší chytit a táhnout nahoru nebo dolů, tedy v ose Y. Jakmile čáru pustím, měla by zůstat na aktuálních souřadnicích.

Pomohla by uklázka kódu...děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě doplním. Mám 2 buttony, nahoru a dolů, kde:

 Private Sub Button2_MouseDown(sender As Object, e As MouseEventArgs) Handles Button2.MouseDown
        posunY = posunY + 1
        If posunY > picCapture.Location.Y + picCapture.Height Then
            posunY = picCapture.Location.Y + picCapture.Height
        End If
        Call Primka()
    End Sub

Private Sub Primka()
        picCapture.Refresh()
        LineShape1.X1 = picCapture.Location.X : LineShape1.X2 = picCapture.Location.X + picCapture.Width
        LineShape1.Y1 = posunY : LineShape1.Y2 = posunY
        TextBox1.Text = posunY
    End Sub

klikám na buttony, lineshape se posouvá nahoru a dolů. Tohle funguje.

Pak jsem se snažuil totéž udělat tažením myší, ale to už nefunguje:

Private Sub LineShape1_MouseDown(sender As Object, e As MouseEventArgs) Handles LineShape1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            'posouváme
            priznakpohybu = True
        End If
    End Sub

    Private Sub LineShape1_MouseMove(sender As Object, e As MouseEventArgs) Handles LineShape1.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left And priznakpohybu = True Then
            posunY = posunY + e.Y
            Call Primka()

        End If
    End Sub

    Private Sub LineShape1_MouseUp(sender As Object, e As MouseEventArgs) Handles LineShape1.MouseUp
        MsgBox("Událost Mouse.Up")
        priznakpohybu = False
    End Sub

Po zmáčknutí levého tlačítka myši na lineshape se prvek označí, ale když posouvám myš nahoru nebo dolů, neděje se nic. Také vůbec nenastane událost "LineShape1_MouseUp" viz poslední část kódu.

Prosím co je špatně?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Já bych to řešil pomoci druhého controlu PictureBox s názvem např. picSplitter.

Ten bude mít nastaveno:

BackColor = Color.Black
Cursor = Cursors.HSplit
Size = New System.Drawing.Size(396, 5)
TabStop = False

a bude reagovat na události MouseDown, MouseMove a MouseUp, kód je následující:

Private InDrag As Boolean

    Private Sub picSplitter_MouseDown(sender As Object, e As MouseEventArgs) Handles picSplitter.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            picSplitter.BackColor = Color.DarkGray
            InDrag = True
        End If
    End Sub

    Private Sub picSplitter_MouseMove(sender As Object, e As MouseEventArgs) Handles picSplitter.MouseMove
        If InDrag Then
            If e.Y + picSplitter.Top <= picCapture.Top Then
                picSplitter.Top = picCapture.Top
            ElseIf e.Y + picSplitter.Top > picCapture.Top + picCapture.Height Then
                picSplitter.Top = picCapture.Top + picCapture.Height
            Else
                picSplitter.Top = e.Y + picSplitter.Top
            End If
        End If
    End Sub

    Private Sub picSplitter_MouseUp(sender As Object, e As MouseEventArgs) Handles picSplitter.MouseUp
        If InDrag Then
            picSplitter.BackColor = Color.Black
            InDrag = False
        End If
    End Sub
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback