/// <summary>
		/// Substitui base inferior atual por outra.
		/// </summary>
		/// <param name="novaBase">Nova base inferior a ser exibida pelo formulário.</param>
		/// <param name="origem">Quem mandou substituir.</param>
		/// <remarks>Chamada pela base inferior.</remarks>
		internal void SubstituirBase(BaseInferior novaBase, BaseInferior origem)
		{
			if (origem != baseAtual)
				throw new Exception("Base de origem não pode substituir base, pois não é a base atual!");

			if (!basesInferiores.Contains(novaBase))
			{
                PermissãoFuncionário.AssegurarPermissão(novaBase.Privilégio);

                if (novaBase.DefinirControlador(this))
                {
                    Formulário.NovaBase(novaBase);
                    novaBase.AoCarregarCompletamente(null);
                }
			}

			SubstituirBaseAtual(novaBase);
			MostrarBaseFormulário(novaBase);
		}
        /// <summary>
        /// Substitui base inferior atual por outra, mesmo que esta
        /// não tenha nenhum vínculo com a base em exibição. O usuário
        /// é questionado se ele deseja que a base seja substituída.
        /// </summary>
        /// <param name="novaBase">Base inferior a ser exibida.</param>
        /// <param name="título">Título da base inferior.</param>
        /// <param name="descrição">Descrição da base inferior.</param>
        public void SubstituirBaseArbitrariamente(BaseInferior novaBase, string título, string descrição)
        {
            if (novaBase == baseAtual)
                return;

            using (QuestionarSubstituiçãoBI dlg = new QuestionarSubstituiçãoBI(título, descrição))
            {
                if (dlg.ShowDialog(baseFormulário) == System.Windows.Forms.DialogResult.OK)
                {
                    if (!basesInferiores.Contains(novaBase))
                    {
                        PermissãoFuncionário.AssegurarPermissão(novaBase.Privilégio);

                        novaBase.DefinirControlador(this);
                        Formulário.NovaBase(novaBase);
                        novaBase.AoCarregarCompletamente(null);
                    }

                    SubstituirBaseAtual(novaBase);
                    MostrarBaseFormulário(novaBase);
                }
            }
        }
		/// <summary>
		/// Insere base inferior.
		/// </summary>
		/// <param name="baseInferior">Base inferior a ser exibida.</param>
		public void InserirBaseInferior(BaseInferior baseInferior)
		{
            if (PermissãoFuncionário.ValidarPermissão(baseInferior.Privilégio))
            {
                components.Add(baseInferior);
                basesInferiores.Add(baseInferior);

                baseInferior.DefinirControlador(this);

                Formulário.NovaBase(baseInferior);

                AoInserirBaseInferior(baseInferior);
            }
		}