C# -  RicthTextBox dinâmico e exibindo imagens


 Neste artigo vou mostar como podemos exibir imagens em um controle RichTextBox na linguagem C# em uma aplicação Windows Forms.

Um controle RichTextBox é uma caixa de texto avançada que fornece edição de texto e recursos avançados de formatação, incluindo o carregamento de arquivos de formato de texto rico (RTF).

Podemos criar um controle RichTextBox usando um designer de formulários em tempo de design ou usando a classe RichTextBox no código em tempo de execução.

Para criar um controle RichTextBox em tempo de design, basta arrastar e soltar um controle RichTextBox da Caixa de ferramentas em um Formulário no Visual Studio. Uma vez que um RichTextBox for adicionado no Formulário, você pode movê-lo e redimensioná-lo usando o mouse e definir suas propriedades e eventos na caixa de propriedades.

Criar um controle RichTextBox em tempo de execução é meramente um trabalho de criação de uma instância da classe RichTextBox, definindo suas propriedades e adicionando o objeto RichTextBox à coleção Controls do Formulário.

O primeiro passo para criar um RichTextBox dinâmico é criar uma instância da classe RichTextBox. O trecho de código a seguir cria um objeto de controle RichTextBox.

            // Cria um objeto RichTextBox
            RichTextBox rtbxd = new RichTextBox();

 

A seguir podemos definir as propriedades do controle RichTextBox.

O código abaixo define o tamanho, a localização, a cor de fundo, a cor de primeiro plano, um texto, o nome e as propriedades de fonte do objeto richTextBox criado :

            //define a localização e tamanho
            rtbxd.Location = new Point(100, 100);
            rtbxd.Width = 400;
            rtbxd.Height = 250;
            //Define a cor de fundo e de primeiro plano
            rtbxd.BackColor = Color.Black;
            rtbxd.ForeColor = Color.White;
            //define um texto , o nome a fonte do controle
            rtbxd.Text = "Olá, sou um controle richtextbox dinâmico";
            rtbxd.Name = "rtbxd";
            rtbxd.Font = new Font("Georgia", 16);
            //incluindo o controle na coleção Controls do formulário
            Controls.Add(rtbxd);

 

Para que o controle seja exibido temos que incluir o controle na coleção Controls do formulário : Controls.Add(rtbxd)

Podemos também definir diversas propriedades do controle como :

O código a seguir mostrar um exemplo de definição destas propriedades:

            //define propriedades do controle
            rtbxd.AcceptsTab = true;
            rtbxd.WordWrap = true;
            rtbxd.ScrollBars = RichTextBoxScrollBars.Both;
            rtbxd.ShortcutsEnabled = false;

 

Além disso podemos realizar diversas operações com este controle. As principais são :

Geralmente as operações acima são feitas sobre um texto selecionado no controle usando a propriedade SelectedText : Ex: string texto = rtbxd.SelectedText;

Lendo o conteúdo de um controle RichTextBox

Para ler o conteúdo de um controle RichTextBox basta usar a propriedade Text do controle (sem formatação).

No código abaixo estamos lendo linha por linha o conteúdo de um controle RichTextBox:

             string[] rtbxLinhas = rtbxd.Lines;

            foreach (string linha in rtbxLinhas)
            {
                MessageBox.Show(linha);
            }

Após essa apresentação básica do controle vamos ver como criar um controle RichTextBox dinamicamente e como exibir imagens no controle RichTextBox.

Recursos Usados:

Criando um projeto Windows Forms

Abra o VS 2017 Community e crie um projeto do tipo Windows Forms com o nome RichTextBox_Picture.

No formulário do projeto inclua os seguintes controles a partir da ToolBox:

1- Código do evento Click botão Criar RichTextBox dinâmico inclua o código abaixo:

private void btnCriar_Click(object sender, EventArgs e)
        {
            rtbx.Visible = false;
            // Cria um objeto RichTextBox
            RichTextBox rtbxd = new RichTextBox();
            //define a localização e tamanho
            rtbxd.Location = new Point(100, 100);
            rtbxd.Width = 400;
            rtbxd.Height = 250;
            //Define a cor de fundo e de primeiro plano
            rtbxd.BackColor = Color.Black;
            rtbxd.ForeColor = Color.White;
            //define um texto , o nome a fonte do controle
            rtbxd.Text = "Olá, sou um controle richtextbox dinâmico";
            rtbxd.Name = "rtbxd";
            rtbxd.Font = new Font("Georgia", 16);
            //define propriedades do controle
            rtbxd.AcceptsTab = true;
            rtbxd.WordWrap = true;
            rtbxd.ScrollBars = RichTextBoxScrollBars.Both;
            rtbxd.ShortcutsEnabled = false;
            //incluindo o controle na coleção Controls do formulário
            Controls.Add(rtbxd);
            string[] rtbxLinhas = rtbxd.Lines;
            foreach (string linha in rtbxLinhas)
            {
                MessageBox.Show(linha);
            }
        }
 

2- No evento Click do botão Localizar Imagem inclua o código abaixo:

 private void btnLocalizarImagem_Click(object sender, EventArgs e)
        {
            rtbx.Visible = true;
            ofd1.Filter = "Images |*.bmp;*.jpg;*.png;*.gif;*.ico";
            ofd1.Multiselect = false;
            ofd1.FileName = "";
            DialogResult resultado = ofd1.ShowDialog();
            if (resultado == DialogResult.OK)
            {
                Image img = Image.FromFile(ofd1.FileName);
                Clipboard.SetImage(img);
                rtbx.Paste();
                rtbx.Focus();
            }
            else
            {
                rtbx.Focus();
            }
        }

 

Executando o projeto iremos obter o seguinte resultado:

1- Criando o RichTextBox dinâmico

2- Exibindo imagens no controle

Pegue o código do projeto aqui : RichTextBox_Picture.zip

"Havendo Deus antigamente falado muitas vezes, e de muitas maneiras, aos pais, pelos profetas, a nós falou-nos nestes últimos dias no Filho (Jesus)"
Hebreus 1:1

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti