Newsgroup: it.comp.programmare.win32
Titolo: [c#/wpf] Abilitare e disabilitare menù da codice

Vorrei fare una cosa semplicissima: abilitare o disabilitare le voci 
del menù principale di un'applicazione. Il problema è che non riesco ad 
accedere direttamente alle voci di menu via codice.
Per esempio con un menù di questo tipo:
Edit
  Cut
  Copy
  Paste
Come faccio ad avere le proprietà di Cut, Copy, Paste?
Per ora sono riuscito solo con un codice tipo questo:
menuEdit.Items(0).IsEnabled=false;
Non c'è la possibilità di scrivere qualcosa che non passi dall'indice 
(che può variare), tipo così:
menuEdit.Items("Cut").IsEnabled=false ?
Oppure
menuEdit.menuItemCut.IsEnabled=false ?

 menuEdit.menuItemCut.IsEnabled=false ?
Parli di winform, giusto?
Se stai usando il designer, selezionando il menu dovresti avere la 
possibilità di impostare le proprietà dalla propertybox. Tra queste c'è 
la "Name" che imposta un nome scelto da te per quel menu.
Così facendo puoi usarlo in questo modo:
mnuCopy.Enabled = false;
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/

 mnuCopy.Enabled = false;
ah, pensavo che la proprietà "header" facesse le veci di "name", grazie 
:)

 ah, pensavo che la proprietà "header" facesse le veci di "name", grazie :)
Prego!


 Prego!
Sembra strano ma neppure con la proprietà name settata riesco ad 
accedere direttamente agli items... dove sbaglio? :(


ah ho visto ora che parli di wpf, sono proprio cieco :)
Nel tag xaml devi specificare x:Name="mymenu" per assegnare il nome del 
controllo e renderlo utilizzabile nel code behind.
Se stai usando wpf questo però non è il modo consigliato.
I menu (come i button e molti altri controlli) possono lanciare i 
preziosi Command che sono simili a degli eventi ma sprovvisti del 
"sender".
Per cut/copy/paste hai persino dei command già pronti:
<MenuItem Command="ApplicationCommands.Cut" />
Inoltre per abilitare/disabilitare il controllo puoi gestire il 
CanExecute del commandbinding.
Per brevità leggi questo articolo che è esaustivo sull'argomento:
http://msdn.microsoft.com/en-us/library/ms752308.aspx
Infine un caloroso consiglio. Quando usi WPF adotta il pattern MVVM 
secondo il quale:
- la view (lo xaml) è in binding con un viewmodel
- tutti le azioni dei controlli lanciano dei command che vengono 
mappati ai metodi del viewmodel
- tutti i dati presentati dai controlli sono in binding con proprietà 
presenti nel viewmodel
- eventuali eventi sono mappati al viewmodel tramite un "behavior" (per 
farla breve una classe che rimappa eventi su command).
Se la cosa ti interessa ti consiglio di guardare il kit "MVVM Light" 
(Codeplex) che ha un sacco di classi pronte per evitare di scriversi il 
codice necessario al pattern.
Ciao


 codice necessario al pattern.
Non è la prima volta che incappo in questo modello ma non ho ancora 
avuto occasione di applicarlo. Ora sto lavorando su un'applicazione già 
esistente in cui mi rimane solo di fare delle modifiche. Nel frattempo 
studio, solo che non è facile per me  muoversi tra la documentazione di 
c#/wpf.

 non ï¿œ facile per me  muoversi tra la documentazione di c#/wpf.
Se ci prendi la mano, MVVM diventa un must, e non solo per WPF ma anche 
in applicazioni MVC 
asp.net
 dove il concetto di viewmodel ï¿œ certamente 
molto utile.
BTW, penso le domande su WPF (e non solo) siano piï¿œ indicate su 
it.comp.dotnet


 it.comp.dotnet
Ho provato a scriverci qualche volta, ma non mi sembra molto 
frequentato...

 Ho provato a scriverci qualche volta, ma non mi sembra molto frequentato...
confermo che rispetto a qualche anno fa, sembra che i developer siano 
spariti dalla circolazione, comunque su quel ng c'è forse più traffico 
rispetto a questo ng (cosa del tutto ininfluente rispetto al fatto che 
la domanda sia appropriata o meno)


 appropriata o meno)
Facendo invece un discorso a parte, sai mica consigliarmi qualche 
risorsa (preferirei un libro) per padroneggiare un po' meglio wpf? e 
magari anche .net4...

 .net4...
Il libro di Adam Nathan ï¿œ quello che preferisco sopra tutti.
Su .net4 non saprei indicarti un libro in particolare. Su come funziona 
il framework sicuramente il libro di Richter CLR via C# ï¿œ un must
