2012-02-08 12 views
12

Objetivo: un menú de usuario con Copiar y Pegar y el usuario verá las teclas de método abreviado.Accesos directos Ctrl + C Ctrl + V no funcionan en los cuadros de texto si MenuStrip tiene estos accesos directos establecidos

MenuStrip blocks TextBoxes

Problema: Si usted tiene un MenuStrip y establecer las ShortcutKeys el son "atrapado" por el menú, pero ya no por los cuadros de texto. Esto significa que no puede usar Ctrl + C/V en los cuadros de texto, solo haciendo clic con el botón derecho. Si elimina los accesos directos, los cuadros de texto funcionan bien.

¿Por qué es eso? ¿Cuál es la solución si no quiero nombrar la entrada "Copiar ______ Ctrl + C"?

Ejemplo concreto: http://www.file-upload.net/download-4098087/MenuBlocksSTRG.zip.html

MSDN se ha reducido ATM i encontraron esta enlaces:

+0

Normalmente vinculará el código que ejecuta copiar/pegar a estos elementos del menú. – CodesInChaos

+0

@JoeWhite Su enlace es sobre WPF, la pregunta es sobre WinForms. – CodesInChaos

+0

Creo que esta pregunta está relacionada: http://stackoverflow.com/questions/5113722/how-to-disable-copy-paste-and-delete-features-on-a-textbox-using-c-sharp –

Respuesta

1

Es probable que tenga que manejar las cosas a sí mismo en esos casos.

ejemplo simple:

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

Crear el Portapapeles es engorroso. ¿Qué pasa si el Cursor no comienza al principio del cuadro de texto sino en el medio del texto? ¿Qué sucede si se selecciona algún texto para copiar o reemplazar? Elijo configurar el Texto del menú para "Copiar Ctrl + C" – user799821

+0

¿Intentó aplicar el código de la respuesta, o simplemente dijo que era engorroso? porque, se daría cuenta de que esto no es una respuesta para usted, requiere que cuando haga clic en su menú, maneje copiar o pegar desde su cuadro de texto, que no es lo que su menú debería funcionar. –

+0

@ user799821 No estoy seguro de lo que quiere decir. El ejemplo publicado hace el trabajo por ti. La propiedad 'SelectedText' devuelve lo que está actualmente resaltado en el cuadro de texto. La parte "else" del código es para manejar las funciones de copiar y pegar para los controles que no son de texto.Si las funciones del menú son solo para los controles del cuadro de texto, entonces no tendrá que preocuparse por la parte "else". – LarsTech

2

Esto debería funcionar para la copia, y puede hacerse cargo de la pasta de la misma manera:

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

Crear el Portapapeles es engorroso. ¿Qué pasa si el Cursor no comienza al principio del cuadro de texto sino en el medio del texto? ¿Qué sucede si se selecciona algún texto para copiar o reemplazar? Elijo establecer el texto del menú en "Copiar Ctrl + C" – user799821

+0

Esto funciona para copiar en todos los casos (incluido el que dijiste), toma el texto seleccionado del cuadro de texto en el portapapeles. ¿Lo intentaste? Si no puede hacer pegar de acuerdo con esta idea, informe, entonces escribiré un código. Y si crees que es engorroso, pediste trabajar en el camino .net funciona. Eso es engorroso. –

+0

Excelente solución. Aunque cambié el cheque a un 'this.ActiveControl más general es TextBox', ya que el resto de mi programa es un editor de imágenes :) – Nyerguds

0

se necesita algo como esto?

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

Si aún así las cosas, la solución simple podría ser: Muestra sólo el texto teclas de acceso directo, como en la imagen.

Ctrl + V

En el conjunto de cuadro de texto ShortcutsEnabled true. ¡Eso es todo!

Cuestiones relacionadas