public ConsultaProcessoClienteEstrutura(
            Form tela,
            Action<Modelo.Processo.ModeloProcesso> fichaProcesso,
            Label navegacao,
            NumberTextBox codigoCliente,
            TextBoxBase nomeCliente,
            TextBoxBase codigoProcesso,
            TextBoxBase numeroProcesso,
            TextBoxBase numeroOrdemProcesso,
            TextBoxBase varaProcesso,
            TextBoxBase cabecaProcesso,
            TextBoxBase tipoAcaoProcesso,
            TextBoxBase reuProcesso,
            TextBoxBase dataAjuizamentoProcesso,
            ListBox responsaveisProcesso,
            TextControl objetivoProcesso,
            TextControl andamentoProcesso,
            ButtonBase botaoPesquisar,
            ButtonBase botaoAnterior,
            ButtonBase botaoProximo,
            ButtonBase botaoFichaCompleta
            )
        {
            ListaProcessos = new List<Processo>();
            ClientePesquisa = new Cliente();

            codigoCliente.GotFocus += (sender, args) => tela.BeginInvoke(new Action(() => codigoCliente.SelectAll()));
            codigoCliente.PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == "Value")
                {
                    ClientePesquisa.Id = codigoCliente.Value;
                }
            };
            ClientePesquisa.IdAlterado += (antigo, novo) => codigoCliente.Value = novo;

            nomeCliente.TextChanged += (sender, args) => ClientePesquisa.Nome = nomeCliente.Text;
            ClientePesquisa.NomeAlterado += (antigo, novo) => nomeCliente.Text = novo;

            botaoPesquisar.Click += new EventHandler(botaoPesquisar_Click);

            botaoAnterior.Click += (sender,args) => IndiceProcessoAtual--;
            botaoProximo.Click += (sender, args) => IndiceProcessoAtual++;

            botaoFichaCompleta.Click+= (sender,args)=>{
                Processo ProcessoAtual = ListaProcessos[IndiceProcessoAtual];
                if (ProcessoAtual == null) return;

                fichaProcesso(ListaProcessos[IndiceProcessoAtual]);
            };

            CarregarProcesso = new Action(() =>
            {
                if (ListaProcessos.Count > IndiceProcessoAtual)
                {
                    Processo ProcessoAtual = ListaProcessos[IndiceProcessoAtual];
                    if (ProcessoAtual == null) return;
                    ProcessoAtual.ObterColecoes();
                    codigoProcesso.Text = ProcessoAtual.Id.ToString();
                    cabecaProcesso.Text = ProcessoAtual.Cabeca.Nome;
                    numeroProcesso.Text = ProcessoAtual.NumeroProcesso;
                    numeroOrdemProcesso.Text = ProcessoAtual.NumeroOrdem;
                    reuProcesso.Text = ProcessoAtual.Reu;
                    varaProcesso.Text = ProcessoAtual.Vara;
                    var tiposAcao = TiposAcao.Listar();
                    foreach (TipoAcao tpAcao in tiposAcao)
                    {
                        if (tpAcao.Id == ProcessoAtual.TipoAcao.Id)
                        {
                            tipoAcaoProcesso.Text = tpAcao.Descricao;
                            break;
                        }
                    }
                    dataAjuizamentoProcesso.Text = ProcessoAtual.DataAjuizamentoAcao.HasValue ? ProcessoAtual.DataAjuizamentoAcao.Value.ToString("ddMMyyyy") : null;
                    responsaveisProcesso.Items.Clear();
                    responsaveisProcesso.Items.AddRange(ProcessoAtual.Responsaveis.Select((r)=>r.Advogado).ToArray());
                    CarregarObjetivo(ProcessoAtual, objetivoProcesso);
                    GetRegistroAndamento(ProcessoAtual, andamentoProcesso);
                }
                if (ListaProcessos.Count > 0)
                {
                    navegacao.Text = String.Format("{0} de {1}", IndiceProcessoAtual + 1, ListaProcessos.Count);
                }
                else
                {
                    navegacao.Text = "0 de 0";
                }
            });

            LimparCampos = new Action(() =>
            {
                codigoProcesso.Text = String.Empty;
                cabecaProcesso.Text = String.Empty;
                numeroProcesso.Text = String.Empty;
                numeroOrdemProcesso.Text = String.Empty;
                reuProcesso.Text = String.Empty;
                varaProcesso.Text = String.Empty;
                tipoAcaoProcesso.Text = String.Empty;
                dataAjuizamentoProcesso.Text = String.Empty;
            });
        }
        public ConsultaSimplesEstrutura(
            Form tela,
            Action<ModeloCliente> telaCliente,
            Action<ModeloProcesso> telaProcesso,
            RadioButton opcaoPesquisaCliente,
            RadioButton opcaoPesquisaProcesso,
            NumberTextBox codigoCliente,
            TextBoxBase nomeCliente,
            TextBoxBase cpfCliente,
            TextBoxBase rgCliente,
            NumberTextBox codigoProcesso,
            TextBoxBase numeroProcesso,
            TextBoxBase cabecaProcesso,
            ButtonBase botaoPesquisar,
            ButtonBase botaoFichaCadastral,
            ButtonBase botaoProcuracaoINSS,
            DataGridView gridPesquisa
            )
        {
            ClientePesquisa = new Cliente();
            ProcessoPesquisa = new Processo();
            GridPesquisa = gridPesquisa;
            Tela = tela;
            TelaCliente = telaCliente;
            TelaProcesso = telaProcesso;

            opcaoPesquisaCliente.CheckedChanged += (sender, args) =>
            {
                GridPesquisa.DataSource = null;
                TipoConsulta = opcaoPesquisaCliente.Checked ? eTipoConsulta.Cliente : eTipoConsulta.Processo;
            };
            opcaoPesquisaProcesso.CheckedChanged += (sender, args) =>
            {
                GridPesquisa.DataSource = null;
                TipoConsulta = opcaoPesquisaProcesso.Checked ? eTipoConsulta.Processo : eTipoConsulta.Cliente;
            };

            codigoCliente.GotFocus += (sender, args) => tela.BeginInvoke(new Action(() => codigoCliente.SelectAll()));
            codigoCliente.PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == "Value")
                {
                    ClientePesquisa.Id = codigoCliente.Value;
                }
            };
            ClientePesquisa.IdAlterado += (antigo, novo) => codigoCliente.Value = novo;

            nomeCliente.TextChanged += (sender, args) => ClientePesquisa.Nome = nomeCliente.Text;
            ClientePesquisa.NomeAlterado += (antigo, novo) => nomeCliente.Text = novo;

            cpfCliente.TextChanged += (sender, args) => ClientePesquisa.Cpf = cpfCliente.Text;
            ClientePesquisa.CpfAlterado += (antigo, novo) => cpfCliente.Text = novo;

            rgCliente.TextChanged += (sender, args) => ClientePesquisa.Rg = rgCliente.Text;
            ClientePesquisa.RgAlterado += (antigo, novo) => rgCliente.Text = novo;

            codigoProcesso.GotFocus += (sender, args) => tela.BeginInvoke(new Action(() => codigoProcesso.SelectAll()));
            codigoProcesso.PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == "Value")
                {
                    ProcessoPesquisa.Id = codigoProcesso.Value;
                }
            };
            ProcessoPesquisa.IdAlterado += (antigo, novo) => codigoProcesso.Text = novo.ToString();

            numeroProcesso.TextChanged += (sender, args) => ProcessoPesquisa.NumeroProcesso = numeroProcesso.Text;
            ProcessoPesquisa.NumeroProcessoAlterado += (antigo, novo) => numeroProcesso.Text = novo;

            cabecaProcesso.TextChanged += (sender, args) => ProcessoPesquisa.Cabeca.Nome = cabecaProcesso.Text;
            ProcessoPesquisa.Cabeca.NomeAlterado += (antigo, novo) => cabecaProcesso.Text = novo;

            botaoPesquisar.Click += new EventHandler(botaoPesquisar_Click);
            botaoFichaCadastral.Click += new EventHandler(botaoFichaCadastral_Click);
        }