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

Come spostare il cursore su un pannello di un certo valore

  1. #1
    Ciao a tutti.

    Sono diversi giorni che sto cercando di capire come realizzare uno "snap" e quindi far sì che quando il cursore si trova sopra un pannello, il cursore si possa spostare di un valore indicato dall'utente. Ad esempio se un utente indica un valore di 25px, il cursore all'interno del pannello dovrà spostarsi di 25px alla volta.

    Ovviamente se il cursore non si trova su un punto corrispondente allo snap il cursore dovrà automaticamente spostarsi sullo snap più vicino.

    Ho pensato di procedere con il seguente codice ma mi sono bloccato su due costrutti if.
        Private Sub Pannello_MouseMove(sender As Object, e As MouseEventArgs) Handles Pannello.MouseMove
            ' Recupero i valori di snap_x e snap_y inseriti dall'utente in due TextBox
            Dim Snap_X As Integer = TB_Snap_X.Text
            Dim Snap_Y As Integer = TB_Snap_Y.Text
    
            ' Catturo le coordinate X e Y del cursore nel pannello
            Dim Cursore_X As Integer = e.X
            Dim Cursore_Y As Integer = e.Y
    
            ' Se il cursore nell'asse x non si trova in snap lo sposto automaticamento nello snap più vicino
            If Cursore_X Mod Snap_X <> 0 Then
    
            End If
    
            ' Se il cursore nell'asse y non si trova in snap lo sposto automaticamento nello snap più vicino
            If Cursore_Y Mod Snap_Y <> 0 Then
    
            End If
        End Sub
    
    Secondo voi come potrei procedere?

    Ciao, grazie mille a tutti.

  2. #2
    Ciao a tutti.
    Secondo voi non è proprio possibile?

  3. #3
    Sgrubak non è in linea Scribacchino
    Mah... Tutto è possibile.

    Così a naso, ti direi che l'approccio che cerchi di seguire secondo me non è giusto. Di sicuro non riposizionerei il puntatore nel MouseMove del controllo.

    Piuttosto penserei ad un controllo derivato che:
    1) Predispone una proprietà booleana che abiliti/disabiliti lo snap;
    2) predispone due proprietà per lo SnapX e SnapY;
    3) nasconde il puntatore al MouseEnter, se lo snap è On;
    4) Ha un OnPaint personalizzato che disegna un puntatore fittizio, nella posizione del nodo più vicino al puntatore;
    5) Mostra il puntatore al MouseLeave, se lo snap è On.

    Tutto da testare ovviamente. Il tuo quesito mi incuriosiva e volevo fare qualche esperimento, ma è stato un periodo incasinato e non son riuscito.

  4. #4
    Ciao Sgrubak, grazie per la risposta.
    Sono riuscito a fare un piccolo progresso ma quello che ho fatto può essere sicuramente migliorato. Posto subito quello che ho fatto.

        Private Sub Pannello_MouseMove(sender As Object, e As MouseEventArgs) Handles Pannello.MouseMove
            ' Modifico il puntatore sul pannello
            Pannello.Cursor = Cursors.Cross
    
            ' Recupero i valori di snap impostati nelle textbox
            Dim snap_x As Integer = TB_Snap_X.Text
            Dim snap_y As Integer = TB_Snap_Y.Text
    
            ' Modifico la posizione del cursore
            If Not e.X Mod snap_x = 0 Or Not e.Y Mod snap_y = 0 Then
                Cursor.Position = New Point(Math.Round(Cursor.Position.X / snap_x) * snap_x, Math.Round(Cursor.Position.Y / snap_y) * snap_y)
                Thread.Sleep(100)
            End If
        End Sub
    
    Spiego il problema. Quando imposto la nuova posizione del cursore scrivo "Cursor.Position = New Point(...". In questo modo ridefinisco la posizione del cursore facendo riferimento alle coordinate dello schermo e non alle coordinate del pannello. Infatti, se sposto il form nelle coordinate 0,0 dello schermo (in alto a sinistra per intenderci) il tutto funziona abbastanza bene. Ma se sposto il form in una qualsiasi altra posizione dello schermo le coordinate del pannello non corrispondono alle coordinate dello schermo. Allora mi chiedevo: come potrei fare a ridefinire le coordinate del cursore facendo riferimento al pannello e non allo schermo?
    Ciao, grazie mille e scusa se sono stato un pochino lungo nella spiegazione.

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Selezione di un certo numero di celle
    Da Giovanni68 nel forum Microsoft Excel
    Risposte: 2
    Ultimo Post: 03-11-2017, 11:26
  2. spostare valore tra celle di colonna
    Da anadin nel forum Microsoft Excel
    Risposte: 6
    Ultimo Post: 03-04-2014, 12:37
  3. cambio valore con un certo fade
    Da JPetrucci nel forum Visual Basic 6
    Risposte: 15
    Ultimo Post: 21-09-2011, 11:38
  4. Tasti cursore per spostare una picturebox
    Da @Pino@ nel forum Visual Basic .Net
    Risposte: 5
    Ultimo Post: 30-10-2010, 15:54
  5. Risposte: 23
    Ultimo Post: 07-05-2006, 21:27