+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

Come interrompere esecuzione di un Private Sub al click del tasto destro dl mouse

  1. #1
    Ciao a tutti.

    Come da titolo mi chiedevo come posso fare per interrompere l'esecuzione di un Private Sub al click del tasto destro del mouse.
    Mi spiego: cliccando con il tasto sinistro del mouse il programma mi disegna linee su un pannello; vorrei che al click del tasto destro del mouse il comando si interrompa. Se successivamente ricomincio a cliccare con il tasto sinistro deve disegnarmi le nuove linee.

    Grazie mille a tutti, ciao.

  2. #2
    Una Sub viene eseguita tutta. Puoi controllare l'esecuzione con delle variabili booleane ma bisogna capire se si sta eseguendo un ciclo o altro.

    Capiamo prima cosa scritto in questa Sub e come viene eseguita.
    ℹ️ Leggi di pi su AntonioG ...

  3. #3
    Ciao AntonioG, grazie per la risposta e scusa se non ho risposto subito ma sono un pochino impicciato con il lavoro.

    Riguardo l'argomento in oggetto pensavo di muovermi in questo modo:

        Dim Punti_x As New List(Of Integer)
        Dim Punti_y As New List(Of Integer)
    
        Dim a As Integer = 0
    
        Private Sub Pannello_MouseClick(sender As Object, e As MouseEventArgs) Handles Pannello.MouseClick
            ' Se clicco il bottone sinistro del mouse disegno le linee
            If e.Button = MouseButtons.Left Then
                Punti_x.Add(e.X)
                Punti_y.Add(e.Y)
    
                Dim Sezione As Graphics = Pannello.CreateGraphics
    
                ' Definisco il colore e lo spessore delle linee
                Dim Linea As Pen = New Pen(Brushes.Red, 5)
    
                If Punti_x.Count >= 2 Then
                    Sezione.DrawLine(Linea, Punti_x(a), Punti_y(a), Punti_x(a + 1), Punti_y(a + 1))
                    a += 1
                End If
            Else
                ' Se clicco il tasto destro del mouse chiudo il comando
                '...
                '...
                '...
            End If
        End Sub
    
    Facendo in questo modo utilizzo il costrutto "If" ma non so come fare quando successivamente scrivo "Else".
    Secondo te sbagliato muovermi in questo modo?
    Ciao, grazie mille.

  4. #4
    L'avatar di Brontolo
    Brontolo non  in linea Very Important Person
    A me non chiaro. La tua Sub viene eseguita solo se fai click, quindi, se non fai click, non c' bisogno di interrompere niente.
    Pare che la tua routine tracci un segmento tra due punti individuati da due click. Forse vorresti con il click destro interrompere il tracciamento della linea spezzata per poi riprenderlo da un altro punto? E' questo che vuoi fare?
    ℹ️ Leggi di pi su Brontolo ...

  5. #5
    Ciao Brontolo.

    Hai colto in pieno la mia idea. E' esattamente quello che vorrei fare.

  6. #6
    L'avatar di _alka_
    _alka_ non  in linea Very Important Person
    Quote Originariamente inviato da samurai.sette Visualizza il messaggio
    E' esattamente quello che vorrei fare.
    Secondo me, il procedimento non del tutto corretto.
    Mi spiego: quando nascondi e mostri di nuovo la finestra dell'applicazione, il disegno rimane?

    Se tutto si muove come sospetto, il disegno dovrebbe scomparire, in quanto tu stai usando direttamente l'oggetto Graphics per disegnare sul pannello, ma quando l'area del controllo viene "invalidata" e Windows richiede al pannello stesso di ridisegnarsi, il controllo non ha "memoria" del disegno originale che hai fatto tu, e che verr presumibilmente rimpiazzato dall'aspetto predefinito del controllo.

    Quello che devi fare a fronte del clic catturare le coordinate memorizzarti le informazioni all'interno di una struttura dati appropriata: ad esempio, puoi creare una lista concatenata in cui, dal primo all'ultimo, vai a inserire i dati di tutti i punti ottenuti su ogni clic con il tasto sinistro all'interno del controllo in modo da tenerli in memoria, e a fronte del ridisegno del controllo, intercettando gli eventi giusti o ereditando dal controllo stesso, vai a invocare la gestione predefinita del disegno (che riproduce l'aspetto di default) a cui aggiungerai il tracciato basato sui punti che hai memorizzato fino a quel momento.

    Al clic sul tasto destro puoi memorizzare in un flag booleano l'interruzione della sequenza di punti, ossia ti salvi la condizione che ti fa ripartire da zero con un nuovo insieme di punti (svuotando la relativa lista) al prossimo clic sul pannello con il tasto sinistro.

    Il concetto fondamentale che quanto disegni va preservato in qualche modo, o salvando il bitmap risultante o le informazioni che permettono di generarlo al volo (o entrambi se occorre una sorta di cache).

    Ciao!
    ℹ️ Leggi di pi su _alka_ ...

  7. #7
    L'avatar di Brontolo
    Brontolo non  in linea Very Important Person
    Quote Originariamente inviato da _alka_ Visualizza il messaggio
    Il concetto fondamentale che quanto disegni va preservato in qualche modo
    Se intende chiudere la finestra e ritrovare il disegno alla riapertura allora quello che dici giusto, ma in realt samurai non ha posto il problema in questi termini.
    Per limitarsi a ci che ha chiesto penso che sia sufficiente una variabile booleana, chiamiamola "status", inizialmente False.
    Se il click sinistro e status false si memorizzano le coordinate del punto (punto iniziale) e si pone status a true.
    Se il click sinistro e status true si traccia dal punto iniziale al nuovo punto e si si sostituiscono e nuove coordinate alle precedenti.
    Se il click destro si pone status a false.

    Dovrebbe funzionare.
    ℹ️ Leggi di pi su Brontolo ...

  8. #8
    Ciao a tutti.

    Ho letto con molto interesse i vostri consigli. Nei prossimi giorni provo a scrivere del codice e vediamo cosa ne riesco a tirare fuori.

    Per il momento grazie mille, siete stati gentilissimi. Ciao

  9. #9
    L'avatar di _alka_
    _alka_ non  in linea Very Important Person
    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    Se intende chiudere la finestra e ritrovare il disegno alla riapertura allora quello che dici giusto
    No, mi riferisco banalmente al nasconderla, o al ridurla a icona e ripristinarla, in generale al coprire l'area del disegno e "scoprirla" nuovamente causando la necessit da parte di Windows di aggiornare l'area interessata.

    Quote Originariamente inviato da Brontolo Visualizza il messaggio
    ma in realt samurai non ha posto il problema in questi termini.
    Ok, per ho visto il codice che ha scritto e sapendo le problematiche a cui sarebbe andato incontro, nell'ottica di sistemare quella porzione di programma, ho fornito il relativo suggerimento per aggirare un secondo problema magari tralasciato, evitando il possibile rischio di dover magari cambiare pi volte il codice. Mica vietato.
    ℹ️ Leggi di pi su _alka_ ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 3
    Ultimo Post: 29-07-2020, 22:02
  2. Tasto destro mouse
    Da nioMatrix nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 04-06-2005, 10:05
  3. Dirlistbox con sel da tasto destro mouse
    Da lupin_85 nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 09-03-2005, 20:44
  4. Disabilitare tasto destro mouse
    Da Antonello nel forum Microsoft Word
    Risposte: 5
    Ultimo Post: 29-12-2004, 18:04
  5. help information e tasto destro mouse
    Da ferrari nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 27-10-2004, 16:50