Α-Ο-Υ-Τ-Σ! Αυτό είναι μανίκι!
Μου φαίνεται ότι έχεις δύο επιλογες:
1. Προσέχετε να μην πειράζετε τα μενού χωρίς να ανανεώνετε και τη βάση. Πονάει, αλλά είναι η πιο απλή λύση.
2. Θα πρέπει να αντιστρέψεις τη λογική των μενού. Αντί να προσπαθείς να βρεις τα μενού που πρέπει να εμφανίσεις ή να διαγράψεις, θα πρέπει να κρατάς σε μια λίστα το μενού και την κατάστασή του (ενεργοποιημένο κλπ.) Δες αυτό το άρθρο στο MSDN,
http://msdn.microsoft.com/msdnmag/issues/02/10/CommandManagement/, το οποίπ περιγράφει πως να κάνεις αυτή τη δουλειά για menuitems και toolbars ταυτόχρονα. Δημιουργεί μια κλάση CommandManager η οποία περιέχει αντικείμενα Commands. Το κάθε αντικείμενο Command περιέχει την μέθοδο που θα εκτελέσει και τα Menuitems ή toolbar buttons στα οποία αντιστοιχεί. Έτσι, αν αλλάξει το Enabled property ενός Command, αυτόματα αλλάζει και το Enabled property των menuitem και toolbarbutton.
Οι αντιστοιχίες ορίζονται όπως στον παρακάτω κώδικα:
private void InitializeCommandManager()
{
cmdMgr = new CommandManager();
cmdMgr.Commands.Add( new Command( "EditCopy",
new Command.ExecuteHandler(OnCopy),
new Command.UpdateHandler(UpdateCopyCommand)));
cmdMgr.Commands["EditCopy"].CommandInstances.Add(
new Object[]{mnuEditCopy, tlbMain.Buttons[4]});
}
Μετά μπορείς να αλλάξεις την κατάσταση ενός command απλά με:
cmdMgr.Commands["EditCopy"].Enabled=false;
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos