/// <summary> /// Procura os dados desejados e mostra janela de resultados. /// </summary> /// <param name="tipo">Tipo de chave.</param> /// <param name="chave">Texto chave.</param> /// <returns>Pessoa escolhida ou nulo.</returns> private static Entidades.Pessoa.Pessoa Procurar(IWin32Window owner, TipoChave tipo, string chave) { List<Entidades.Pessoa.Pessoa> pessoas; using (Apresentação.Formulários.Aguarde aguarde = new Apresentação.Formulários.Aguarde( "Procurando no banco de dados.", 1, "Procurando pessoas", "Aguarde enquanto o sistema procura no banco de dados pelos dados fornecidos.")) { aguarde.Abrir(); switch (tipo) { case TipoChave.Código: ulong código = 0; bool erro = false; try { código = ulong.Parse(chave); } catch { erro = true; } if (erro) pessoas = new List<Entidades.Pessoa.Pessoa> { }; else pessoas = new List<Entidades.Pessoa.Pessoa> { Entidades.Pessoa.Pessoa.ObterPessoa(código) }; break; case TipoChave.Nome: pessoas = BuscaTextual.ObterPessoas(chave); break; case TipoChave.CPF: pessoas = new List<Entidades.Pessoa.Pessoa>() { PessoaFísica.ObterPessoaPorCPF(chave) }; break; case TipoChave.RG: pessoas = PessoaFísica.ObterPessoasPorRG(chave); break; case TipoChave.CNPJ: pessoas = PessoaJurídica.ObterPessoasPorCNPJ(chave); break; case TipoChave.Telefone: pessoas = Entidades.Pessoa.Pessoa.ObterPessoasPorTelefone(chave); break; case TipoChave.Cidade: pessoas = Entidades.Pessoa.Pessoa.ObterPessoasPorCidade(Localidade.ObterLocalidades(chave.Trim())); break; case TipoChave.Estado: pessoas = Entidades.Pessoa.Pessoa.ObterPessoasPorEstado(Estado.ObterEstados(chave)); break; default: throw new NotSupportedException("Chave não suportada: " + Enum.GetName(typeof(TipoChave), tipo)); } if (pessoas.Count == 0) { aguarde.Close(); const string msg = "Nenhuma pessoa foi encontrada com os dados fornecidos. "; const string título = "Pesquisa de pessoa"; if (owner != null) MessageBox.Show( owner, msg, título, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); else MessageBox.Show( msg, título, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); return null; } else if (pessoas.Count == 1) return pessoas[0]; else { aguarde.Passo("Preparando resultado."); using (ProcurarPessoaResultados dlg = new ProcurarPessoaResultados(pessoas)) { aguarde.Close(); if (dlg.ShowDialog(owner) == DialogResult.OK) { if (dlg.PessoaSelecionada is PessoaFísica) { Entidades.Pessoa.Pessoa pessoa; Apresentação.Formulários.AguardeDB.Mostrar(); pessoa = Entidades.Pessoa.Pessoa.ObterPessoa(dlg.PessoaSelecionada.Código); Apresentação.Formulários.AguardeDB.Fechar(); return pessoa; } else { return dlg.PessoaSelecionada; } } } } } return null; }
/// <summary> /// Ocorre quando se pressiona uma tecla no textbox /// </summary> private void txt_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if (!Enabled) return; if (lista == null) return; // A chamada get da propriedade Pessoa zera txt.Text. string texto = txt.Text; try { int idx = -1; if (lista.SelectedIndices.Count > 0) idx = lista.SelectedIndices[0]; switch (e.KeyCode) { case Keys.Delete: if (txt.SelectionLength == txt.TextLength) Limpar(); break; case Keys.Down: if (++idx >= lista.Items.Count) idx = lista.Items.Count - 1; lista.Items[idx].Selected = true; lista.Items[idx].EnsureVisible(); e.Handled = true; break; case Keys.Up: if (--idx < 0) idx = 0; lista.Items[idx].Selected = true; lista.Items[idx].EnsureVisible(); e.Handled = true; break; case Keys.Enter: if (Pessoa != null && Pessoa.Nome.Trim() == texto.Trim()) { if (lista != null) lista.Visible = false; NotificarEventoSelecionadoSeNecessário(); return; } if (somenteCadastrados && lista.Items.Count > 0) { AguardeDB.Mostrar(); List<Entidades.Pessoa.Pessoa> pessoas = BuscaTextual.ObterPessoas(texto.Trim()); AguardeDB.Fechar(); using (ProcurarPessoaResultados dlg = new ProcurarPessoaResultados(pessoas)) { if (dlg.ShowDialog(ParentForm) == DialogResult.OK) Pessoa = dlg.PessoaSelecionada; } } lista.Visible = false; e.Handled = true; break; case Keys.Escape: lista.Visible = false; break; } } catch { e.Handled = true; } finally { this.OnKeyDown(e); } if (KeyDown != null) KeyDown(this, e); }