2012-02-08 15 views
12

Obiettivo: un Menustrip con Copia e incolla e l'utente deve vedere i tasti di scelta rapida.Tasti di scelta rapida Ctrl + C Ctrl + V non funzionano nelle caselle di testo se MenuStrip ha questo set di scorciatoie

MenuStrip blocks TextBoxes

Problema: Se si dispone di un MenuStrip e di impostare le ShortcutKeys la sono "catturato" dal menu, ma non più dal caselle di testo. Ciò significa che non puoi usare Ctrl + C/V nelle caselle di testo, solo facendo clic con il pulsante destro del mouse. Se rimuovi i collegamenti, le caselle di testo funzionano correttamente.

Perché è quello? Qual è la soluzione se non voglio nominare la voce "Copia ______ Ctrl + C"?

Esempio di progetto: http://www.file-upload.net/download-4098087/MenuBlocksSTRG.zip.html

MSDN è giù ATM ho trovato questo link:

+0

Normalmente si associa codice che esegue copia/incolla a queste voci di menu. – CodesInChaos

+0

@JoeWhite Il tuo collegamento riguarda WPF, la domanda riguarda WinForms. – CodesInChaos

+0

Penso che questa domanda sia correlata: http://stackoverflow.com/questions/5113722/how-to-disable-copy-paste-and-delete-features-on-a-textbox-using-c-sharp –

risposta

1

Probabilmente avete di gestire le cose da soli in quei casi.

semplice esempio:

private void copyToolStripMenuItem_Click(object sender, EventArgs e) { 
    if (this.ActiveControl is TextBox) { 
    Clipboard.SetText(((TextBox)this.ActiveControl).SelectedText); 
    } else { 
    // do your menu Edit-Copy code here 
    } 
} 

private void pasteToolStripMenuItem_Click(object sender, EventArgs e) { 
    if (this.ActiveControl is TextBox) { 
    ((TextBox)this.ActiveControl).SelectedText = Clipboard.GetText(); 
    } else { 
    // do you menu Edit-Paste code here 
    } 
} 
+0

Costruire gli Appunti è ingombrante. Cosa succede se il Cursore non si avvia all'inizio della casella di testo ma nel mezzo del testo. Cosa succede se un testo è selezionato per copiare o sostituire. Ho scelto di impostare il testo del menu su "Copia Ctrl + C" – user799821

+0

hai persino provato a applicare il codice dalla risposta, o hai appena detto che è ingombrante? perché, ti rendi conto che questa non è la risposta per te, richiede che quando il tuo menu viene cliccato, gestisce copia o incolla dalla tua casella di testo, che non è ciò che il menu dovrebbe funzionare. –

+0

@ user799821 Non sei sicuro di cosa intendi. L'esempio pubblicato fa il lavoro per te. La proprietà 'SelectedText' restituisce ciò che è attualmente evidenziato nella casella di testo. La parte "else" del codice consiste nel gestire le funzioni di copia-incolla per i controlli non di testo.Se le funzioni del menu sono solo per i controlli della casella di testo, non dovrai preoccuparti della parte "else". – LarsTech

2

Questo dovrebbe funzionare per la copia, e si può prendere cura di pasta in allo stesso modo:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == (Keys.Control | Keys.C) && textBox1.ContainsFocus) 
     { 
      Clipboard.SetText(textBox1.SelectedText); 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
+0

Costruire gli Appunti è ingombrante. Cosa succede se il Cursore non si avvia all'inizio della casella di testo ma nel mezzo del testo. Cosa succede se un testo è selezionato per copiare o sostituire. Ho scelto di impostare il testo del menu su "Copia Ctrl + C" – user799821

+0

Questo funziona per la copia in tutti i casi (incluso quello che hai detto), prende il testo selezionato dalla casella di testo negli appunti. Hai provato? Se non riesci a incollare secondo questa idea, segnala, quindi scriverò del codice. E se pensi che sia ingombrante, hai chiesto di aggirare il modo. NET funziona. È ingombrante. –

+0

Ottima soluzione. Anche se ho cambiato il controllo in un più generale 'this.ActiveControl è TextBox', poiché il resto del mio programma è un editor di immagini :) – Nyerguds

0

Hai bisogno di qualcosa di simile?

ToolStripMenuItem Quit = new ToolStripMenuItem(); 
     Quit.Name = "quitToolStripMenuItem"; 
     Quit.Text = "&Quit"; 
     Quit.ShortcutKeys = Keys.Alt | Keys.F4; 
     Quit.Click += new EventHandler(quitToolStripMenuItem_Click); 
0

Se è importante ancora, la soluzione più semplice potrebbe essere: Mostra solo il testo tasti di scelta rapida, come nell'immagine.

Ctrl + V

Nel set TextBox ShortcutsEnabled su true. È tutto!

Problemi correlati