+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Gestione azione e movimento mouse

  1. #1
    eternauta non è in linea Novello
    Post
    11

    Gestione azione e movimento mouse

    Ciao a tutti,

    vorrei capire se sto sbagliando approccio oppure proprio non si può fare (sto utilizzando c# da poso).

    Sostanzialmente vorrei che al passaggio del mouse su un oggetto, un user control costruito apposta, questo riconosca se sto premendo il pulsante destro o sinistro, e in base al tasto premuto apportare alcune modifiche al controllo stesso: cose molto semplici deve cambiare colore e o bordo. Riporto sotto il main e l'user control, il tutto è riportato su un form con un panel. Ora, il programma funzionerebbe pure, ma non funziona sempre e comunque non in modo fluido. A volte mi colora tutti i simpatici rettangolini, a volte no.. insomma è poco affidabile.

    codice:
    private void StaffManager_Load(object sender, EventArgs e)
            {
                for (int i = 0; i < panel1.Right; i += 15)
                {
                    Cluster cluster = new Cluster();
                    cluster.Left = i;
                    panel1.Controls.Add(cluster);
                }
            }
    codice:
     public partial class Cluster : UserControl
        {
            public Cluster()
            {
                InitializeComponent();
            }
    
            private void Cluster_Load(object sender, EventArgs e)
            {
                this.BackColor = Color.Gray;
            }
    
            private void Cluster_MouseMove(object sender, MouseEventArgs e)
            {
                switch (Control.MouseButtons)                
                {
                    case  MouseButtons.Left:
                        this.BackColor = Color.Green;
                        this.BorderStyle = BorderStyle.FixedSingle;
                        break;
                    case MouseButtons.Right:
                        this.BackColor = Color.Gray;
                        this.BorderStyle = BorderStyle.Fixed3D;
                        break;
                }
            }
    
            private void Cluster_MouseEnter(object sender, EventArgs e)
            {
                switch (Control.MouseButtons)
                {
                    case MouseButtons.Left:
                        this.BackColor = Color.Green;
                        this.BorderStyle = BorderStyle.FixedSingle;
                        break;
                    case MouseButtons.Right:
                        this.BackColor = Color.Gray;
                        this.BorderStyle = BorderStyle.Fixed3D;
                        break;
                }
            }
    
        
        }
    se qualcuno ha tempo per metterci il naso..

    Grazie e buona festa dei lavoratori (anche se sto lavorando)!

  2. #2
    Luogo
    Padova
    Post
    4,366
    Blogs
    36

  3. #3
    eternauta non è in linea Novello
    Post
    11
    Grazie per la risposta,

    Quindi non funziona perché l'evento "tasto premuto" resta finché si tiene il tasto del mouse premuto anche se mi sposto su un altro controllo. Però cosi non ho mai modo di verificare mai neanche l'uscita dal controllo stesso (o dovrei verificarlo facendo un controllo sulla posizione x/y del mouse rispetto alla grandezza del controllo).

    Però perché se parto dall'inizio del controllo funziona, e riesco a "colorarli" tutti?

    Non so se sono stato chiaro nello spiegare che il passaggio sui controlli deve avvenire senza rilasciare mai il tasto del mouse.

    Comunque grazie ancora per l'indicazione.

  4. #4
    Dev-01 non è in linea Scolaretto
    Post
    361
    Devi eseguire un trascinamento? O qualcosa simile al drag'n'drop tipo gli acquisti su alcuni siti web?

  5. #5
    eternauta non è in linea Novello
    Post
    11
    Ciao Dev-01,

    No nessun drag'n'drop. mi serviva un oggetto utilizzabile come una sorta di regolatore di volume per mixer digitali. Passando sopra i controlli con il tasto sx del mouse premuto essi si dovevano accendere o spengere. Pero il mio problema era che quando ero sopra un controllo e premevo il tasto questo evento non si chiudeva quando uscivo dal controllo.

    ho risolto con il comando: this.Capture = false;

    posto il codice per completezza del thread:

    codice:
     private void Cluster_MouseMove(object sender, MouseEventArgs e)
             {
                 switch (Control.MouseButtons)
                 {
                     case MouseButtons.Left:
                         if (e.X>1 && e.X<this.Width)
                         {
                             (Application.OpenForms["Form1"]).Controls["txtProva"].Text = Convert.ToString(e.X);                         
                             this.BackColor = Color.Green;
                             this.Capture = false;
                         }
                         else if (e.X<1)
                         {
                             (Application.OpenForms["Form1"]).Controls["txtProva"].Text = Convert.ToString(e.X);
                             this.BackColor = Color.Gray;
                             this.Capture = false;
                         }
                     
                         break;
                     case MouseButtons.Right:
                         this.BackColor = Color.Gray;
                         break;
                 }     
            }
    grazie

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi