private void Adicionar(Entidades.Mercadoria.Mercadoria mercadoria, double quantidade, ModoJanelaÍndice modoJanelaÍndice, bool conferirTravamento)
        {
            double índice;

            if (conferirTravamento && ConferirTravamento())
                return;

            try
            {
                EscolherÍndice(mercadoria, modoJanelaÍndice);
                índice = mercadoria.ÍndiceArredondado;
            }
            catch (Exception)
            {
                MessageBox.Show(
                    Parent,
                    "A operação foi cancelada pelo sistema, pois não foi possível obter o índice da mercadoria.",
                    "Relacionamento de mercadoria",
                    MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return;
            }

            // Altera o valor do indice dentro da mercadoria:
            HistóricoRelacionamentoItem itemAdicionado;

            try
            {
                itemAdicionado = coleção.Relacionar(mercadoria, quantidade, índice);
            }
            catch (OperaçãoCancelada)
            {
                MessageBox.Show(
                    ParentForm,
                    "A operação foi cancelada pelo sistema. Nenhuma alteração foi realizada no banco de dados.",
                    "Relacionamento de mercadoria",
                    MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return;
            } catch (InvalidAsynchronousStateException)
            {
                RecarregarDocumentoInconsistente();
                return;
            }

            try
            {
                bandejaHistórico.Adicionar(new SaquinhoHistóricoRelacionado(itemAdicionado));
                bandejaAgrupada.Adicionar(new Saquinho(mercadoria, quantidade));
            }
            catch (Exception e)
            {
                MessageBox.Show(ParentForm,
                    "Ocorreu um erro enquanto tentava-se atualizar a interface gráfica, porém a mercadoria foi registrada no banco de dados.\n\nPor favor, abra de novo o documento com o qual você está trabalhando.",
                    "Relacionamento de mercadoria",
                    MessageBoxButtons.OK, MessageBoxIcon.Stop);
                Acesso.Comum.Usuários.UsuárioAtual.RegistrarErro(e);
                bandejaAgrupada.Visible = false;
                bandejaHistórico.Visible = false;
                quadroMercadoria.Visible = false;
                quadroHistórico.Visible = false;
                quadroAgrupado.Visible = false;
                quadroFoto.Visible = false;
            }
            
#if !DEBUG
            try
            {
#endif 
                if (AoAdicionar != null)
                    AoAdicionar(this, mercadoria, quantidade);
#if !DEBUG
            }
            catch (Exception e)
            {
                MessageBox.Show(ParentForm,
                    "Ocorreu um erro disparando evento de adição de mercadoria. De qualquer maneira, a mercadoria foi registrada no banco de dados.",
                    "Relacionamento de mercadoria",
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Acesso.Comum.Usuários.UsuárioAtual.RegistrarErro(e);
            }
#endif

        }
        /// <summary>
        /// Caso o modo seja "NuncaMostrarNãoAlterandoÍndice",
        /// o índice deve ser obtido da mercadoria no parâmetro.
        /// </summary>
        protected virtual void EscolherÍndice(Entidades.Mercadoria.Mercadoria mercadoria, ModoJanelaÍndice modoJanela)
        {
            if (verificador != null)
            {
                List<double> listaÍndicesCompletos = verificador.ObterListaÍndices(mercadoria);

                // Cria uma lista com os índices arredondados
                List<double> listaÍndicesArredondados = new List<double>();
                foreach (double d in listaÍndicesCompletos)
                {
                    double arredondado = Math.Round(d, 2);
                    if (!listaÍndicesArredondados.Contains(arredondado))
                        listaÍndicesArredondados.Add(arredondado);
                }
                if (!listaÍndicesArredondados.Contains(mercadoria.ÍndiceArredondado))
                    listaÍndicesArredondados.Add(mercadoria.ÍndiceArredondado);

                // Neste ponto a listaÍndices tem um ou mais elementos.
                if ((modoJanela == ModoJanelaÍndice.MostrarSempre || listaÍndicesArredondados.Count > 1)
                    && (modoJanela != ModoJanelaÍndice.NuncaMostrarNãoAlterandoÍndice))
                {
                    JanelaEscolhaÍndice j = new JanelaEscolhaÍndice();
                    j.CarregarÍndices(listaÍndicesArredondados, mercadoria.ÍndiceArredondado, mercadoria, entidade as RelacionamentoAcerto);
                    if (j.ShowDialog() == DialogResult.OK)
                    {
                        // Altera o indice na mercadoria
                        mercadoria.Índice = j.ObterValorEscolhido();
                    }
                    else
                    {
                        throw new Exception("Cancelado pelo usuário");
                    }

                    mercadoria.Índice = j.ObterValorEscolhido();
                }
                else if (modoJanela != ModoJanelaÍndice.NuncaMostrarNãoAlterandoÍndice)
                    mercadoria.Índice = listaÍndicesArredondados[0];
            }
        }
 private void Adicionar(Entidades.Mercadoria.Mercadoria mercadoria, double quantidade, ModoJanelaÍndice modoJanelaÍndice)
 {
     Adicionar(mercadoria, quantidade, modoJanelaÍndice, true);
 }