I Want My .Mommy! (Episode I: Tooltip Tips)

Αυτό το άρθρο είναι παλιό και έχει μεταφερθεί (με την αυθεντική ημ/νία) από το άλλο μου blog (GreekIT) το οποίο είναι κατηργημένο.

Από το MSDN:

ToolTip Class

Represents a small rectangular pop-up window that displays a brief description of a control's purpose when the user rests the pointer on the control.

Ναι, καλά... Ο τρόπος υλοποίησης των tooltips είναι αρκετά μπερδεμένος. Αφήστε δε που η περιγραφή της ToolTip είναι παραπλανητική. Η ToolTip δεν "αντιπροσωπεύει" καθόλου ένα "pop-up window", αν ήταν έτσι, κάθε instance θα συνέδεε ένα control με το tooltip string. Καμμία σχέση με τη πραγματικότητα.

Εν πρώτοις, φτιάχνεις ένα instance και μετά του λες με τη μέθοδο SetToolTip τι tooltip θα εμφανίζεται σε κάθε control (του δίνεις το control και το tooltip string). Δηλαδή, το κάθε instance "δένει" κάποια controls με τα αντίστοιχά τους tooltips. Μπορείς να φτιάξεις όσα ToolTips θες και να δώσεις διαφορετικό tooltip για κάθε control από το κάθε instance της ToolTip. Για κάθε instance της ToolTip που δίνει ένα tooltip σε ένα control έχεις το αντίστοιχο tooltip στο control (αν έχεις δώσει δύο tooltip από δύο instances στο ίδιο control, εμφανίζονται δύο tooltips στο control, το ένα πάνω στο άλλο!). Ωραίο;

Τι μπορείς να κάνεις με αυτό; Αν δεν μπερδέψεις τα πράγματα και δεν δώσεις πολλαπλά tooltips στο ίδιο control, μπορείς να έχεις ομαδοποιημένη διαχείριση των tooltips. Π.χ. διαφορετικό στυλ, χρώματα, delays κλπ. Θα νόμιζε κανείς ότι με ομαδοποιημένη διαχείρηση θα μπορούσε να εναλλάσσει μεταξύ tooltip sets, απενεργοποιόντας ένα και ενεργοποιόντας άλλο (πολλαπλά tooltips για τα ίδια control χωρίς να εμφανίζονται ποτέ μαζί), αλλά δεν υπάρχει η δυνατότητα απενεργοποίησης... doh!

Αμ το άλλο; Το tooltip, επειδή δεν είναι property των control, δεν μπορεί να καθοριστεί "άπαξ" στο design-time. Δώρον άδωρον... :(

Μάλλον προτιμώ το σύστημα της Java (στο Swing). Εκεί, όλα τα controls κληρονομούν getter/setter για το tooltip τους. Στη περίπτωση που ένα control θέλει να δείχνει διαφορετικά tooltip σε συγκεκριμένες περιοχές του (όπως συμβαίνει με κάποια controls του Swing), μπορεί να το κάνει. Τα tooltip στο Swing δείχνουν αυτόματα και το shortcut (mnemonic) του control/menu στο οποίο ανήκουν. Όλα τα tooltip μιας εφαρμογής ελέγχονται κεντρικά από τον ToolTipManager και με αυτό το τρόπο μπορούν να ενεργοποιηθούν/απενεργοποιηθούν όπως και να αλλάξουν συμπεριφορά (delays κλπ.). Υπάρχουν και άλλες ενδιαφέρουσες δυνατότητες που δεν είναι εμφανείς με μια απλή ανάγνωση του javadoc.

Ενημέρωση 18/7/06: Ετοιμάζω διορθωτικό άρθρο.

Σημ.: Είχα ετοιμάσει άρθρο που έπερνα πίσω κάποια πράγματα από αυτά που γράφω καθώς είδα το active property. Κάποια στιγμή θα γράψω και πιο πληροφορημένα άρθρα γύρω από το .NET.

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Έρευνα ΠΑΚΟΕ για τις κατάλληλες και ακατάλληλες παραλίες της Αττικής

Web Hosting για προσωπικό site

Apache, Subversion, Trac, MoinMoin