/// <summary>
        /// Ocorre quando usuário clica em procurar.
        /// </summary>
        protected override void AoClicarBtnProcurar(object sender, EventArgs e)
        {
            if (Text.Trim().Length > 3)
            {
                Localidade[] localidades;

                AguardeDB.Mostrar();

                try
                {
                    localidades = Localidade.ObterLocalidades(Text);
                }
                finally
                {
                    AguardeDB.Fechar();
                }

                using (ListarLocalidades dlg = new ListarLocalidades(localidades))
                {
                    if (dlg.ShowDialog(ParentForm) == DialogResult.OK)
                    {
                        Localidade = dlg.Seleção;
                        DispararAoAlterar();
                    }
                    else
                        base.AoClicarBtnProcurar(sender, e);
                }
            }
            else
                base.AoClicarBtnProcurar(sender, e);
        }
        /// <summary>
        /// Questiona ao usuário se a localidade a ser cadastrada
        /// encontra-se na lista de localidades semelhantes.
        /// </summary>
        /// <param name="localidade">Localidade a ser cadastrada.</param>
        /// <param name="ignorarCadastro">Se o cadastro deve ser ignorado.</param>
        /// <param name="aux">Vetor de localidades semelhantes.</param>
        private void QuestionarSemelhantes(Localidade localidade, out bool ignorarCadastro, Localidade[] aux)
        {
            AguardeDB.Suspensão(true);

            MostrarMensagemLocalidadesSemelhantes(localidade);

            using (ListarLocalidades dlg = new ListarLocalidades(aux))
            {
                if (dlg.ShowDialog(ParentForm) == DialogResult.OK)
                {
                    CopiaCadastro(localidade, dlg);
                    ignorarCadastro = true;
                }
                else
                    ignorarCadastro = false;
            }

            AguardeDB.Suspensão(false);
        }
 private void CopiaCadastro(Localidade localidade, ListarLocalidades dlg)
 {
     foreach (FieldInfo campo in Localidade.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public))
         campo.SetValue(localidade, campo.GetValue(dlg.Seleção));
 }
        public static Localidade Procurar(IWin32Window owner)
        {
            País país;
            Estado estado;
            Região região;
            Localidade[] localidades = null;

            repetir:
            using (ProcurarLocalidade dlg = new ProcurarLocalidade())
            {
                if (dlg.ShowDialog(owner) != DialogResult.OK)
                    return null;

                país = dlg.País;
                estado = dlg.Estado;
                região = dlg.Região;
            }

            AguardeDB.Mostrar();

            try
            {
                if (país != null && estado != null && região != null)
                    localidades = Localidade.ObterLocalidades(estado, região);

                else if (país != null && estado != null)
                    localidades = Localidade.ObterLocalidades(estado);

                else if (país != null)
                    localidades = Localidade.ObterLocalidades(país);

                else if (região != null)
                    localidades = Localidade.ObterLocalidades(região);

                else
                    localidades = Localidade.ObterLocalidades();
            }
            finally
            {
                AguardeDB.Fechar();
            }

            if (localidades.Length == 0)
            {
                if (MessageBox.Show(owner,
                    "Nenhuma localidade foi encontrada com os parâmetros entrados.",
                    "Procurar por localidade",
                    MessageBoxButtons.RetryCancel,
                    MessageBoxIcon.Information,
                    MessageBoxDefaultButton.Button2) == DialogResult.Retry)
                {
                    goto repetir;
                }
            }
            else
            {
                using (ListarLocalidades dlg = new ListarLocalidades(localidades))
                {
                    if (dlg.ShowDialog(owner) == DialogResult.OK)
                        return dlg.Seleção;
                }
            }

            return null;
        }