none
Contextmenustrip items abilitati condizionatamente RRS feed

  • Domanda

  • Buongiorno, ho aggiunto un contextmenustrip ad una richtextbox, con le opzioni

    • copy
    • paste
    • cut
    • select all

    Ora vorrei fare in modo che le prime 3 opzioni siano abilitate SOLO SE nella richtextbox ho selezionato del testo.

    Ora come ora, infatti, esse sono sempre visibili e clickabili.

    Chi mi può aiutare?

    Grazie in anticipo!


    +++ Alex +++

    martedì 17 agosto 2021 08:39

Tutte le risposte

  • Buongiorno Alex, 

    Vediamo se riuscirò ad aiutare in questo caso.

    QUI potresti trovare la documentazione per i contextmenustrips. Sotto gli esempi ci sono i vari dettagli come Properties, Constructors ecc. Dentro essi potresti trovare i vari metodi per far si che il menu venne mostrato come da te descritto sopra. 

    Giusto per un idea, con un semplice IF -> Else metodo, potresti nascondere alcune opzioni. 


    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    martedì 17 agosto 2021 11:08
    Moderatore
  • Grazie, ho già visitato quella pagina. Oltre a essere in C# non contiene quel che mi serve.


    +++ Alex +++

    martedì 17 agosto 2021 13:16
  • errore mio. Come opzione default si apre C#, ma sopra sulla destra, c'e' l'opzione di cambiare la lingua. 

    • Microsoft offre questo servizio gratuitamente, per aiutare gli utenti e aumentare il database dei prodotti e delle tecnologie. Il contenuto fornito “as is“ non comporta alcuna responsabilità da parte dell’azienda.

    martedì 17 agosto 2021 13:30
    Moderatore
  • HO messo ell' evento load del programma questo odice:

     If Not RichTextBox1.SelectedText Then
                ContextMenuStrip1.Items.Item("Copy").Enabled = False
    
     End If

    e correttamete mi disabilita il Copy, ma ora non riesco a farlo riapparire.

    Il codice é_

     If RichTextBox1.SelectedText <> "" Then
                ContextMenuStrip1.Items.Item("Copy").Enabled = True
    
     End If

    Ma non funziona, sia che lo metta nell' evento Open o Opened o visibleChaged del ContextMenuStrip.

    Cosa sbaglio?


    +++ Alex +++

    mercoledì 18 agosto 2021 10:24
  • If RichTextBox1.SelectedText <> "" Then ContextMenuStrip1.Items.Item("Copy").Enabled = True else

    ContextMenuStrip1.Items.Item("Copy").Enabled = false End If

    cosi hai provato?


    Pantaleo

    lunedì 23 agosto 2021 04:15
  • Non funziona...

    avevo già provato, sia a metterlo nel Main.load che negli eventi del contextmenustrip (open, opened, visiblechanged).


    +++ Alex +++


    lunedì 23 agosto 2021 05:43
  • Ciao,

    un paio di appunti e una (forse) soluzione.

    Nell'evento Load, sicuramente RichTextBox non ha un testo selezionato, quindi, perché andarlo a verificare?

    Puoi disabilitare il "Copy" direttamente a design time. Tra l'altro, probabilmente neanche ti serve. Io andrei, nell'evento Opening del ContextMenuStrip a verificare la condizione e abilitare o disabilitare.

    Riprendendo quello che hai scritto tu, una cosa come:

    Copy.Enabled = RichTextBox1.SelectedText <> ""

    Come puoi vedere, non ho fatto riferimento a 

    ContextMenuStrip1.Items.Item("Copy")

    ma, ammesso che il ToolStripMenuItem si chiami proprio "Copy", ho fatto riferimento direttamente all'elemento. Più comodo, no?

    Vedendo il tuo codice, mi viene una domanda.

    Hai l'Option Strict impostata ad On? Se è vero che ti richiede qualche riga di codice in più per fare le varie conversioni, è anche vero che ti può evitare errori di scrittura che potrebbero essere difficilmente individuabili.

    P.s. Probabilmente anziché andare a vedere se la SelectedText è diversa da "", userei, ad esempio, il metodo statico IsNullOrEmpty della classe String   

    lunedì 30 agosto 2021 09:38