Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

MouseEnterκαι MouseLeave events σε picturebox

Îåêßíçóå áðü ôï ìÝëïò dgg. Τελευταία δημοσίευση από το μέλος dgg στις 25-01-2011, 21:16. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-01-2011, 19:02 62650

    MouseEnterκαι MouseLeave events σε picturebox

    Γειά σας,

    Έχω βάλει σε μία φόρμα κάποιες εικόνες σε pictureboxes και θέλω οταν το mouse περναει πανω απο αυτές, να αλλάζει το στυλ εμφανισης τους. Συγκεκριμένα το BorderStyle. Να γίνεται απο Default, σε Fixed3D οταν το mouse ειναι πανω απο το picturebox και να ξαναγίνεται Default όταν φεύγει απο πάνω του. Σκέφτηκα να χρησιμοποιήσω τα MouseEnter και MouseLeave events, αλλα υπάρχει ένα πρόβλημα. Μερικές φορές (τις περισσοτερες δηλαδη) όταν το mouse φεύγει απο το control αυτό παραμένει σε Fixed3D. Αλλες φορές επιστρέφει σε Default κανονικά. Γιατί να συμβαίνει αυτό;;;

    private void pictureBoxFirst_MouseEnter(object sender, EventArgs e)
    {
           pictureBoxFirst.BorderStyle = BorderStyle.Fixed3D;
    }

    private void pictureBoxFirst_MouseLeave(object sender, EventArgs e)
    {
           pictureBoxFirst.BorderStyle = BorderStyle.None;  
     }
  •  25-01-2011, 08:48 62653 σε απάντηση της 62650

    Απ: MouseEnterκαι MouseLeave events σε picturebox

    Καλημερα,

    βρηκα αυτο το link οπου καποιος προσπαθει να κανει το ιδιο πραγμα:
    http://www.eggheadcafe.com/software/aspnet/29322110/mouseleave-event-not-firing-all-the-time.aspx

    η απαντηση που παιρνει ειναι οτι επειδη αλλαζεις το border αλλαζουν οι διαστασεις του control και ξαναγινεται trigger το mouseenter.
  •  25-01-2011, 09:33 62654 σε απάντηση της 62653

    Απ: MouseEnterκαι MouseLeave events σε picturebox

    private void pictureBoxFirst_Mousehover(object sender, EventArgs e)
    {
           pictureBoxFirst.BorderStyle = BorderStyle.Fixed3D;
    }
    Το mousehover εκτελεί τον κώδικα όταν ο κέρσορας περνάει πανω από το control και το επαναφέρει στις default ρυθμίσεις όταν φύγει από αυτό.

    Δοκίμασε το.

  •  25-01-2011, 10:01 62655 σε απάντηση της 62654

    Απ: MouseEnterκαι MouseLeave events σε picturebox

    Φίλε Αλέξανδρε να επισημάνουμε ότι το mouse hover event εκτελείται συνέχεια, σε αντίθεση με τα enter/leave events.

    Κάτι άλλο που θα μπορούσες να κάνεις φίλε dgg είναι το εξής:

    πχ έχεις 5 picture boxes, τα χ1...χ5

    Μπορείς να φτιάξεις δύο κοινά events για όλα (μάλλον έτσι το έχεις ήδη)

    Μέσα στον event handler θα ξεχωρίζεις ποιος είναι ο sender, πχ το χ1

    Και θα θέτεις το border του στο στυλ που θέλεις

    ταυτόχρονα όμως θα κάνεις reset το style στα υπόλοιπα

    Αν έχεις πάρα πολλά controls, πρέπει να ακολουθήσεις άλλη προσέγγιση πάντως.

    Αυτό που κάνω συνήθως σε τέτοιες περιστάσεις είναι να έχω ένα collection με τα controls που έχουν κοινή λειτουργικότητα (List κατά βάση) και να τα διαχειρίζομαι από εκεί.

    Αποφεύγω το collection Controls γιατί εκεί είναι τσουβάλι τα πάντα, και χρειάζεται ελέγχους, cast κλπ.


    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  25-01-2011, 21:16 62689 σε απάντηση της 62650

    Απ: MouseEnterκαι MouseLeave events σε picturebox

    Καλησπέρα παιδιά.

    Σας ευχαριστώ πολύ για τις απαντήσεις σας. Η λύση με το να χρησιμοποιήσω την MouseHover δεν δουλεψε, είχε παρόμοιο αποτέλεσμα. Βρήκα ένα γρήγορο workaround, ισως να μην ειναι το πιο σωστό, δείχνει όμως να δουλεύει. Ακριβώς επειδή η MouseEnter ξαναεκτελείται λόγω του οτι το control αλλάζει μέγεθος, σκέφτηκα να χρησιμοποιήσω την MouseEnter της φόρμας στην οποία είναι τοποθετημένα τα pictureboxes. Έβαλα σε αυτήν να γίνεται το border style πάλι default. Αρα χρησιμοποιώ μόνο την mouseenter του control, για να αλλαξει το στυλ όταν περναει απο πάνω ο κερσορας, και επιστρεφει στο default οταν ο κέρσορας φύγει απο το control τελείως και γυρίσει στη φόρμα.

      private void pictureBoxFirst_MouseEnter(object sender, EventArgs e)
      {
            pictureBoxFirst.BorderStyle = BorderStyle.Fixed3D;
      }

       private void MyForm_MouseEnter(object sender, EventArgs e)
       {
            pictureBoxFirst.BorderStyle = BorderStyle.None;
        }
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems