André Alves de Lima

Talking about Software Development and more…

Mudando a fonte da mensagem de erro do Report Viewer

Com as resoluções dos monitores aumentando a cada dia, muitas vezes é difícil do usuário conseguir ler algumas partes do nosso aplicativo ao utilizar uma resolução muito alta.

Ao contrário do WPF, no Windows Forms isso é muito comum, uma vez que a maioria dos controles não é “DPI aware” (ou seja, seu tamanho não se ajusta automaticamente ao aumentarmos ou diminuirmos o DPI).

No artigo de hoje eu vou mostrar para você como é fácil alterar a fonte da mensagem de erro do Report Viewer.

Essa dúvida veio do meu amigo Bruno Maestro (que também é Microsoft MVP). Ele queria saber como aumentar a fonte da mensagem de erro do controle do Report Viewer, porque com resoluções muito altas, fica difícil de conseguir ler. Então, vamos ver como podemos fazer?

Alterando a fonte

Antes de tudo, se você não sabe de qual mensagem de erro eu estou falando, ela é aquela mensagem que aparece dentro do próprio controle do Report Viewer quando algo está errado. Para reproduzir esse cenário, simplesmente adicione um controle do Report Viewer no seu formulário e execute a aplicação. Dessa forma, uma mensagem de erro será exibida falando que a definição do relatório não foi especificada:

The source of the report definition has not been specified

E como é que conseguimos alterar a fonte dessa mensagem de erro? Simples, altere a propriedade “Font” do controle do Report Viewer!

Isso fará com que essa nova fonte seja utilizada na mensagem de erro do relatório:

Não se preocupe, as fontes do seu relatório em si não serão alteradas (o Report Viewer obedecerá o que estiver configurado na definição do relatório). Somente a fonte dessa mensagem de erro é que será alterada.

Exibindo uma MessageBox com o erro

Uma alternativa que o Bruno Maestro tinha encontrado foi mostrar uma MessageBox com a mensagem de erro, ao invés de deixar a mensagem de erro ser exibida pelo controle do Report Viewer. Como podemos fazer isso? Simples, é só utilizar o evento ReportError:

Como o próprio nome diz, esse evento é disparado sempre que algum erro acontece no controle do Report Viewer. E todas as informações do erro podem ser acessadas através do ReportErrorEventArgs disponibilizado por esse evento. Dessa forma, conseguimos facilmente exibir uma MessageBox com a mensagem de erro:

        private void reportViewer_ReportError(object sender, Microsoft.Reporting.WinForms.ReportErrorEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

Além disso, podemos ainda utilizar a propriedade “Handled” do ReportErrorEventArgs se quisermos que a mensagem de erro seja exibida somente no nosso MessageBox (e não no controle do Report Viewer). Para isso, basta configurar essa propriedade como “true“:

        private void reportViewer_ReportError(object sender, Microsoft.Reporting.WinForms.ReportErrorEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            e.Handled = true;
        }

Com isso, a mensagem de erro será exibida na nossa MessageBox e o controle do Report Viewer continuará em branco (sem a mensagem de erro):

Concluindo

Sempre devemos estar atentos à acessibilidade dos nossos aplicativos. Um formulário com fontes muito pequenas pode dificultar a vida de quem não enxerga direito ou de quem está utilizando uma resolução muito alta.

Como o controle do Report Viewer (desktop) utiliza a engine do Windows Forms, ele não é “DPI aware” e o resultado dessa deficiência é que a fonte da mensagem de erro pode acabar ficando muito pequena.

No artigo de hoje você aprendeu a contornar esse problema de duas formas. A primeira delas foi alterando a própria fonte da mensagem de erro do Report Viewer. E a segunda maneira foi exibindo a mensagem de erro em uma MessageBox.

Agora pare e pense: os seus aplicativos que utilizam o controle do Report Viewer estão rodando em monitores grandes que têm uma possibilidade de resolução alta? Caso positivo, sugiro que você dê uma revisitada nesses aplicativos para conferir se o tamanho da mensagem de erro está grande o suficiente. Me conte depois nos comentários qual foi o resultado, OK?

Por fim, convido você a inscrever-se na minha newsletter. Ao fazer isso, você receberá um e-mail toda semana sobre o artigo publicado e ficará sabendo também em primeira mão sobre o artigo da próxima semana, além de receber dicas “bônus” que eu só compartilho por e-mail. Inscreva-se utilizando o formulário logo abaixo.

Até a próxima!

André Lima

Photo by Pixabay used under Creative Commons
https://pixabay.com/en/error-www-internet-calculator-102075/
https://pixabay.com/en/error-cross-icon-symbol-803716/

10 thoughts on “Mudando a fonte da mensagem de erro do Report Viewer

  • Vinicius Ribeiro disse:

    Bacana André!
    Sabe nos dizer se existe como justificar texto no Reportviewer?
    Obrigado.

  • jonas disse:

    Andre Boa tarde , seu Blog é bem atrativo e interessante , aprendi muito lendo seus artigos .
    Queria tirar uma duvida , estou trabalhando em um projeto e queria saber como faço para criar um método , para o cliente cadastrado , quando for recuperar senha , enviar direto para o E-mail dele o E-mail e senha ?

    • andrealveslima disse:

      Olá Jonas, obrigado pelo comentário!

      Isso depende muito de como você implementou a estratégia de login.. Você criou por conta ou utilizou alguma biblioteca pronta?

      Basicamente, você só precisa recuperar a senha do banco de dados e enviar para ele.. Para saber mais sobre envio de e-mails, eu já escrevi um artigo sobre isso uns tempos atrás:

      Enviando e-mails com C#

      Se isso não te ajudar, dê maiores detalhes de como você implementou a sistemática de login no seu sistema..

      Abraço!
      André Lima

      • jonas disse:

        Oi Andre Boa noite , obrigado pela sua atenção e resposta.
        Meu método esta assim .

        protected void btnRecuperaSenha_Click(object sender, EventArgs e)
        {
        CLIENTE cliente = new CLIENTE();
        ClienteBLL clientebll = new ClienteBLL();

        if (txtEmail.Text != “”)
        {
        if (clientebll.VerificarExistenciaCliente(txtEmail.Text.Trim()))
        {
        cliente = clientebll.RecuperaSenhaCliente(txtEmail.Text.Trim());

        Session.Add(“cliente”, cliente);

        //Cliente Existe
        lblMsg.Text = “Sua senha cadastrada é :” + cliente.SENHA.ToString();
        lblMsg.Visible = true;
        }
        else
        {
        lblMsg.Text = “Você não se encontra cadastrado.”;
        lblMsg.Visible = true;
        }
        }
        else
        {
        //Cliente Existe
        lblMsg.Text = “Informe seu email para buscarmos a senha.”;
        lblMsg.Visible = true;
        }

        • andrealveslima disse:

          Olá Jonas, tudo tranquilo?

          Então, se você quiser mandar um e-mail com a senha, basta você incluir a metodologia de envio logo ali no lugar onde você está setando a senha no label (lblMsg.Text = “Sua senha cadastrada é :” + cliente.SENHA.ToString()), seguindo as instruções daquele link que eu te mandei anteriormente..

          Porém, não é muito legal ficar enviando senha para e-mail.. O melhor seria você criar uma senha temporária e enviar essa senha temporária para o usuário.. Com essa senha temporária ele poderia logar no sistema e alterar a senha para alguma outra senha que ele quiser utilizar..

          Abraço!
          André Lima

  • Jorge disse:

    Muito bom mesmo, Parabéns..

  • Bruno Maestro disse:

    Como sempre bem objetivo. Parabéns André pelo excelente trabalho.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *