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

 

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

Ενώ είναι disabled το ToolstripMenuItem, το DropDown List του εμφανίζεται

Îåêßíçóå áðü ôï ìÝëïò pontifikas. Τελευταία δημοσίευση από το μέλος pontifikas στις 10-03-2010, 16:01. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  01-03-2010, 17:55 57387

    Ενώ είναι disabled το ToolstripMenuItem, το DropDown List του εμφανίζεται

    Έχω  ToolstripMenuItems  σε ένα ContectMenu, πάνω στα οποία έχω κρεμάσει DropDownList (δηλαδή και άλλα ToolstripMenuItems).
    Τα ToolstripMenuItems θέλω να ενεργοποιούνται υπό κάποια συγκεκριμένη συνθήκη. Όταν το εμφανίζω λοιπόν το menu και μερικά είναι Disabled, πράγματι δεν εμφανίζεται το DropDownList όταν κάνω hover από επάνω τους.
    Αν όμως κάνω hover πάνω από ένα που είναι enabled, εμφανιστεί το δικό του Dropdown και αμέσως πάω το mouse πάνω από ένα disabled τότε εμφανίζεται το Dropdown του disabled!!!
    Αν κάνω hover σε Item του Menu που δεν έχει dropdown τότε η σωστή συμπεριφορά επανέρχεται.

    Στον κώδικα δεν έχω OnMouseHover ή κάποιο άλλο event handler εκτός από DropDownOpening event handlers, μεσα στους οποίους βάζω μόνο κάποια icons όταν ανοίγουν τα DropDown. Δεν πειράζω κάτι άλλο.

    Καμοιά ιδέα??
  •  02-03-2010, 11:24 57396 σε απάντηση της 57387

    Απ: Ενώ είναι disabled το ToolstripMenuItem, το DropDown List του εμφανίζεται

    σιγουρα ειναι προγραματιστικο σφαλαμα κατι σου ξεφυγε

    1)λογικα ΠΡΙΝ καναν παει καποιος να ανοιξει το μενου γενικα θα πρεπει να εχεις δει αν η συνθηκη σου παιζει σωστα και κρυβει-εμφανιζει τα μενου που θες
    δηλαδι καλητερα οχι κατα την διαρκεια κουνηματος του ποντικιου πανω

    2)τωρα αν ντε και καλα πρεπει να γινει on mouse move, παιξε με την onmouse ENTER οχι hover.
    προσπαθησα να κανψ κατι τετοιο σε ενα εργο μου, δεν μπορεσα να αναπαραγω καποιο bug, αν μας εδειχες τον κωδικα ίσως βοηθουσαμε περισσοτερο,
    τωρα οτι και να πουμε ισως ειναι στον αερα Stick out tongue

    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  02-03-2010, 13:41 57399 σε απάντηση της 57396

    Απ: Ενώ είναι disabled το ToolstripMenuItem, το DropDown List του εμφανίζεται

    Μα αυτό ακριβώς είναι το θέμα. Δεν έχω συναρτήσεις mouse events. Απλά βασίζομαι στην default συμπεριφορά του contextmenu όταν ένα item του είναι disabled.
    Το μόνο που έχω από events είναι το DropDownOpening το οποίο ξαφνικά(όπως περιέγραψα παραπάνω) αποφασίζει να εκτελεστεί για disabled Item. Και
    σε debug mode το ελεγχω και την ώρα που εκτελείται το DropDownOpening το item είναι disabled!!

    Οριστε και ο κώδιακας από ένα toolstrip item.
    Στον constructor αναθέτω την συνάρτηση στο event.
    MItemShaderProgram.DropDownOpening += new EventHandler(MItemShaderProgram_DropDownOpening);
    Και ιδού η συνάρτηση
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    private void MItemShaderProgram_DropDownOpening(object sender, EventArgs e)
    {
    if (!MItemShaderProgram.Enabled) return;

    string selKey = Foundation.Global3DObjectCollection.Selected3DObjects[0];
    if (selKey == null) return;
    //First get the selected 3D object from the tree
    GLighter3DObj Selected3DObj = Foundation.Global3DObjectCollection.Objects3DList[selKey];

    //For now, GLSL applies only to Mesh3D objects and particularly Mesh3DPrimary's
    if (Selected3DObj.GLObjectType == GLighterObjType.MeshPrimary)
    {
    MeshPrimary SelectedMesh = Selected3DObj as MeshPrimary;
    foreach (ToolStripItem cItem in MItemShaderProgram.DropDownItems)
    {
    if (Convert.ToInt32(cItem.Tag) == SelectedMesh.GLSL_ProgramHandle)
    {
    cItem.Image = StateImageList.Images[0];
    }
    else
    cItem.Image = null;
    }
    }
    }

    Η γραμμή 3 μπήκε τσόντα για να διαπιστώσω του λόγου του αληθές ότι ενώ μπαίνει στην συνάρτηση αυτή, το item που την προκαλεί είναι Enabled = false!! Και το κακό είναι ότι
    ενώ πρόκειται για event τύπου "-ing" δεν έχει e.cancel...Sad.

    To Dropdown επικοινωνεί με ένα Collection και όταν εκείνο αλλάζει, ενημερώνεται. Αν κρίνεται σκόπιμο μπορώ να βάλω και τον κώδικα population αλλά νομίζω ότι είναι άσχετο.
  •  03-03-2010, 02:10 57418 σε απάντηση της 57399

    Απ: Ενώ είναι disabled το ToolstripMenuItem, το DropDown List του εμφανίζεται

    τωρα ειμαι πτωμα και νυσταζω αλλα λιγο που διαβασα εχω μια ερωτηση

    γιατι to addhandler στον constructor?
    γιατι οχι φυσιολογικα μεσα παραδειγμα στο form_load method?

    και γιατι δικο σου handler και οχι το μανατο? το μενου το κανεις δυναμικα? τοτε οκ.
    και εισαι σιγουρος οτι το sender και το e ειναι ΑΚΡΙΒΩΣ τα ιδια με αυτα ενος ετοιμου toostripmenoy?

    καλα τωρα δεν μπορω να το δοκιμασω αυριο με το καλο οταν βρω χρονο και καποιος στο μεταξυ δεν βοηθησει θα επανελθω.δεν την παλευω τωραSleep

    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  03-03-2010, 09:33 57421 σε απάντηση της 57418

    Απ: Ενώ είναι disabled το ToolstripMenuItem, το DropDown List του εμφανίζεται

    Το menu είναι δυναμικό τουλάχιστο στο 2ο επίπεδο. Απλά στον Constructor έχω βάλει κάποια delegates που αφορούν το OnAdd και καθορίζουν το population του 2ου επιπέδου, οπότε απλά μάζεψα όλα τα delgates μαζί.  Ειδικά τα DropDown πράγματι θα μπορούσαν να μην είναι (αναφέρονται στο 1ο επίπεδο) αλλά τα άλλα που έχω εκεί δεν θα μπορούσαν. Πολύ αμφιβάλλω όμως αν αυτό δημιουργεί το πρόβλημα καθώς πρόκειται απλά για αναθέσεις.

    Όσο για το άλλο που λές με τον sender δεν έχει καμοία σημασία διότι ο σκοπός είναι να μην εκτελούταν καν η DropdownOpening αφού το Toolstrip είναι Disabled. Και το αν θα εκτελεστεί αυτή δεν το αποφασίζω εγώ πουθενά στον κώδικα(δεν έχω βάλει κανένα event να κάνει fire ούτε κάποιον έλεγχο όταν γίνεται focus το ToolstripItem). Βασίζεται στην default συμπεριφορά του control. Εγώ απλά κάνω enable ή disable τα toolstripitems σε κάποια χρονική στιγμή, η οποία μάλιστα είναι πάντα όταν το ContextMenu είναι κλειστό.
  •  03-03-2010, 11:21 57425 σε απάντηση της 57421

    Απ: Ενώ είναι disabled το ToolstripMenuItem, το DropDown List του εμφανίζεται

    Μην ψάχνεσαι άδικα στον κώδικά σου,αυτό που παρατήρησες οφείλεται στην συμπεριφορά του ίδιου του control (δυστυχώς δεν θυμάμαι αν το έκαναν έτσι σκόπιμα όμως).Απλά κάνε disable και τα submenu items του menu item που έχεις κάνει disable αντί να στηριχθείς στο ότι δεν θα εμφανιστούν φυσιολογικά.'Ετσι ο χρήστης σου δεν θα μπορεί να πατήσει κάτι πριν να κρίνεις εσύ ότι πρέπει να ενεργοποιηθεί ως επιλογή.Τώρα αν υπάρχουν επιπλέον λόγοι να μην εμφανιστεί το dropdown αυτό (π.χ επιλογές που δεν πρέπει να δει ένας μη εξουσιοδοτημένος χρήστης) μην προσθέσεις το dropdown σε design time και όταν έρθει η ώρα να κάνεις enabled την επιλογή πρόσθεσε τα toolstrip items του dropdown δυναμικά.
  •  10-03-2010, 16:01 57606 σε απάντηση της 57425

    Απ: Ενώ είναι disabled το ToolstripMenuItem, το DropDown List του εμφανίζεται

    Το περίμενα ότι είναι κάποιο bug του framework. Διότι πραγματικό δεν έκανα κάτι εγώ που να επιρρεάζει την συμπεριφορά.
    Ευχαριστώ για τις απαντήσεις.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems