none
Pegar texto da área de transferencia e colar num objeto RichTextBox

    Question

  • Amigos boa tarde.

    Estou fazendo um metodo que quando dentro de um controle RichTextBox (do DevExpress, mas é bem parecido com o TextBox do Visual Studio .Net), no evento MouseDown no clique com o botão direito seja habilitado um MenuItem chamado PASTE, quando clicado neste menu é pego um texto da área de transferência(ClipBoard) e jogado no meu RichTextBox.

    private

     

    void txtComentarioPadrao_MouseDown(object sender, MouseEventArgs e)

    {

     

    if (e.Button == MouseButtons.Right) // Se o click do mouse for no botao direito

    {

     

    ContextMenu objMenu = new ContextMenu();

     

    try

    {

    objMenu.MenuItems.Add(0,

     

    new MenuItem("Copy", new System.EventHandler(Copy_Click)));

    objMenu.MenuItems.Add(1,

     

    new MenuItem("Paste", new System.EventHandler(Paste_Click)));

    objMenu.MenuItems.Add(2,

     

    new MenuItem("Delete", new System.EventHandler(Delete_Click)));

     

    this.ContextMenu = objMenu;

     

    }

     

    catch (Exception ex)

    {

     

    MessageBox.Show(ex.ToString());

    }

    }

    }

     minha pergunta é: Como eu faço para se criar o método que pega o (texto, por exemplo) já copiado e que está na área de transferência e o cola no meu controle TextBox?

    Qualquer ajuda é bem-vinda.
    Muito obrigado pessoal.
    Jacson Camara Nonato
    Tuesday, September 15, 2009 3:20 PM

Answers

  • Informação, o Paste_Click() não está programado, é dele justamente que eu estou precisando.

    Obrigado.

    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 3:21 PM
  • Jacson se você ja copiou de um textBox (textBoxCopy.Copy() ) então é só adicionar este código no seu pasteclick:

    textBoxPaste.Paste()

    Lembrando que quando você chama o Copy() para copiar o texto de um textbox ele só irá copiar o texto selecionado.
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 3:49 PM
  • então.. é que não é de um TextBox que eu copiei.

    O texto no meu caso, poderá ser copiado com o Ctrl + C em qualquer lugar do computador (de um arquivo .doc por exemplo), dai uma vez copiado, eu preciso no evento MouseDown() do controle RichTextBox poder clicar com o botão direito do mouse e escolhe um MenuItem chamado PASTE por exemplo e poder então colar o texto que foi copiado de qualquer lugar no meu controle RichTextBox.

    Tá complicado, pq e4sse controle RichTextBox, não tem uma propriedade de aceitar ou não cópias (ctrl+c /ctrl+v) que eu posso setar com TRUE ou FALSE.


    Se vc puder me ajudar kara, te agradeço pra caramba.
    Valleu,.
    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 4:08 PM
  • Jacson vamos la, no evento do mouse down do richtextbox:

    private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right) // Se o click do mouse for no botao direito 
                {
                    ContextMenu objMenu = new ContextMenu();
                    try
                    {
    
                        objMenu.MenuItems.Add(0, new MenuItem("Copy", new System.EventHandler(Copy_Click)));
    
                        objMenu.MenuItems.Add(1, new MenuItem("Paste", new System.EventHandler(Paste_Click)));
    
                        objMenu.MenuItems.Add(2, new MenuItem("Delete", new System.EventHandler(Delete_Click)));
    
                        this.ContextMenu = objMenu;
                        this.ContextMenu.Show(this, new Point(e.X, e.Y));
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
    
                }
            }
    E no evento do Paste_Click
    private void Paste_Click(object sender, EventArgs e)
            {
                this.richTextBox1.Paste();   
            }
    Não importa de onde você copie, ele sempre estará no clipboard, vai funcionar de qualquer lugar.
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 4:23 PM
  • Nossa amigão muito obrigado pela ajuda.
    Vou testar agora mesmo.

    Só uma pergunta.
    Para que serve essa linha? 

    this

     

    .ContextMenu.Show(this, new Point(e.X, e.Y));


    Obrigado mesmo.


    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 5:13 PM
  • É para mostrar o ContextMenu como um menu flutuante, o ponto é aonde ele vai aparecer, nesse caso onde o mouse está, e o this é o controle no caso seu form.
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 5:15 PM
  • OK Entendi sim.

    Deixa eu te perguntar, no caso do MenuItem DELETE em:

    objMenu.MenuItems.Add(2, new MenuItem("Delete", new System.EventHandler(Delete_Click)));

    eu poderia seguir o mesmo pensamente criando um metodo assim:
    private void Delete_Click(object sender, EventArgs e)
            {
                this.richTextBox1.Clear();  
            }

    funcionaria tbm?

    Muito obrigado pela ajuda.
    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:29 PM
    Tuesday, September 15, 2009 5:19 PM
  • Sim ele limparia todo o texto do campo richtextbox, porém isso não faz com que limpe o ClipBoard para limpar o Clipboard faça: Clipboard.Clear()
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:29 PM
    Tuesday, September 15, 2009 5:21 PM

  • Posso fazer as duas coisas então né ficaria legal.
    Acredito que não seja errado limpar o RichTextBox e de quebra limpar o Clipboard tbm.

    Nossa cara, vc tbm usa DevExpress?
    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:29 PM
    Tuesday, September 15, 2009 5:27 PM
  • Não tranquilo, pode fazer sem problemas, se você precisa fazer isso na sua aplicação sem problema.
    Não uso.
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:30 PM
    Tuesday, September 15, 2009 5:28 PM
  • OK então. 

    Mais uma vez obrigado.
    Té mais.
    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:30 PM
    Tuesday, September 15, 2009 5:30 PM

All replies

  • Informação, o Paste_Click() não está programado, é dele justamente que eu estou precisando.

    Obrigado.

    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 3:21 PM
  • Jacson se você ja copiou de um textBox (textBoxCopy.Copy() ) então é só adicionar este código no seu pasteclick:

    textBoxPaste.Paste()

    Lembrando que quando você chama o Copy() para copiar o texto de um textbox ele só irá copiar o texto selecionado.
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 3:49 PM
  • então.. é que não é de um TextBox que eu copiei.

    O texto no meu caso, poderá ser copiado com o Ctrl + C em qualquer lugar do computador (de um arquivo .doc por exemplo), dai uma vez copiado, eu preciso no evento MouseDown() do controle RichTextBox poder clicar com o botão direito do mouse e escolhe um MenuItem chamado PASTE por exemplo e poder então colar o texto que foi copiado de qualquer lugar no meu controle RichTextBox.

    Tá complicado, pq e4sse controle RichTextBox, não tem uma propriedade de aceitar ou não cópias (ctrl+c /ctrl+v) que eu posso setar com TRUE ou FALSE.


    Se vc puder me ajudar kara, te agradeço pra caramba.
    Valleu,.
    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 4:08 PM
  • Jacson vamos la, no evento do mouse down do richtextbox:

    private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Right) // Se o click do mouse for no botao direito 
                {
                    ContextMenu objMenu = new ContextMenu();
                    try
                    {
    
                        objMenu.MenuItems.Add(0, new MenuItem("Copy", new System.EventHandler(Copy_Click)));
    
                        objMenu.MenuItems.Add(1, new MenuItem("Paste", new System.EventHandler(Paste_Click)));
    
                        objMenu.MenuItems.Add(2, new MenuItem("Delete", new System.EventHandler(Delete_Click)));
    
                        this.ContextMenu = objMenu;
                        this.ContextMenu.Show(this, new Point(e.X, e.Y));
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
    
                }
            }
    E no evento do Paste_Click
    private void Paste_Click(object sender, EventArgs e)
            {
                this.richTextBox1.Paste();   
            }
    Não importa de onde você copie, ele sempre estará no clipboard, vai funcionar de qualquer lugar.
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 4:23 PM
  • Nossa amigão muito obrigado pela ajuda.
    Vou testar agora mesmo.

    Só uma pergunta.
    Para que serve essa linha? 

    this

     

    .ContextMenu.Show(this, new Point(e.X, e.Y));


    Obrigado mesmo.


    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 5:13 PM
  • É para mostrar o ContextMenu como um menu flutuante, o ponto é aonde ele vai aparecer, nesse caso onde o mouse está, e o this é o controle no caso seu form.
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:28 PM
    Tuesday, September 15, 2009 5:15 PM
  • OK Entendi sim.

    Deixa eu te perguntar, no caso do MenuItem DELETE em:

    objMenu.MenuItems.Add(2, new MenuItem("Delete", new System.EventHandler(Delete_Click)));

    eu poderia seguir o mesmo pensamente criando um metodo assim:
    private void Delete_Click(object sender, EventArgs e)
            {
                this.richTextBox1.Clear();  
            }

    funcionaria tbm?

    Muito obrigado pela ajuda.
    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:29 PM
    Tuesday, September 15, 2009 5:19 PM
  • Sim ele limparia todo o texto do campo richtextbox, porém isso não faz com que limpe o ClipBoard para limpar o Clipboard faça: Clipboard.Clear()
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:29 PM
    Tuesday, September 15, 2009 5:21 PM

  • Posso fazer as duas coisas então né ficaria legal.
    Acredito que não seja errado limpar o RichTextBox e de quebra limpar o Clipboard tbm.

    Nossa cara, vc tbm usa DevExpress?
    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:29 PM
    Tuesday, September 15, 2009 5:27 PM
  • Não tranquilo, pode fazer sem problemas, se você precisa fazer isso na sua aplicação sem problema.
    Não uso.
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:30 PM
    Tuesday, September 15, 2009 5:28 PM
  • OK então. 

    Mais uma vez obrigado.
    Té mais.
    Jacson Camara Nonato
    • Marked as answer by Jacson Nonato Tuesday, September 15, 2009 5:30 PM
    Tuesday, September 15, 2009 5:30 PM