Μα αυτό ακριβώς είναι το θέμα. Δεν έχω συναρτήσεις 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...

.
To Dropdown επικοινωνεί με ένα Collection και όταν εκείνο αλλάζει, ενημερώνεται. Αν κρίνεται σκόπιμο μπορώ να βάλω και τον κώδικα population αλλά νομίζω ότι είναι άσχετο.