private static void TentaCadastrarPessoaFísica(TipoPessoaFísica tipoPessoaFísica, ref PessoaFísica entidade, CadastroPessoa janela)
        {
            bool insistir;

            do
            {
                insistir = false;

                if (janela.ShowDialog() == DialogResult.OK)
                {
                    switch (tipoPessoaFísica)
                    {
                        case TipoPessoaFísica.Outro:
                            entidade = (PessoaFísica)janela.Pessoa;
                            break;

                        case TipoPessoaFísica.Funcionário:
                            entidade = ((CadastroFuncionário)janela).Funcionário;
                            break;

                        case TipoPessoaFísica.Representante:
                            entidade = (PessoaFísica)((CadastroRepresentante)janela).Pessoa;
                            break;

                        default:
                            throw new NotSupportedException("Tipo de pessoa-física não suportado.");
                    }

                    AguardeDB.Mostrar();

                    if (entidade.CPF != null && PessoaFísica.VerificarExistênciaCPF(entidade.CPF))
                    {
                        AguardeDB.Fechar();

                        insistir = MessageBox.Show(
                            "O CPF " + entidade.CPF + " já encontra-se cadastrado no banco de dados.",
                            "Cadastro de Pessoa Física",
                            MessageBoxButtons.RetryCancel, MessageBoxIcon.Information) == DialogResult.Retry;
                    }
                    else
                    {
                        try
                        {
                            entidade.Cadastrar();
                            AguardeDB.Fechar();
                        }
                        catch (Exception e)
                        {
                            Acesso.Comum.Usuários.UsuárioAtual.RegistrarErro(e);
                            AguardeDB.Fechar();

                            insistir = MessageBox.Show(
                                "Não foi possível cadastrar a pessoa física. Por favor, verifique se os dados estão corretos.",
                                "Erro cadastrando pessoa física",
                                MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry;
                        }
                    }
                }
            } while (insistir);
        }
        private static CadastroPessoa ConstróiJanelaCadastro(TipoPessoaFísica tipoPessoaFísica)
        {
            CadastroPessoa dlg;
            switch (tipoPessoaFísica)
            {
                case TipoPessoaFísica.Outro:
                    dlg = new CadastroCliente(new PessoaFísica());
                    break;

                case TipoPessoaFísica.Funcionário:
                    dlg = new CadastroFuncionário(new Funcionário());
                    break;

                case TipoPessoaFísica.Representante:
                    dlg = new CadastroRepresentante(new Representante());
                    break;

                default:
                    throw new NotSupportedException("Tipo de pessoa-física não suportado.");
            }

            return dlg;
        }
        private static PessoaFísica CadastrarNovaPessoaFísica(TipoPessoaFísica tipoPessoaFísica)
        {
            PessoaFísica entidade = null;
            CadastroPessoa dlg = ConstróiJanelaCadastro(tipoPessoaFísica);

            try
            {
                TentaCadastrarPessoaFísica(tipoPessoaFísica, ref entidade, dlg);
            }
            finally
            {
                dlg.Dispose();
            }

            return entidade;
        }