/// <summary>
        /// Loads the dictionary.
        /// </summary>
        /// <param name="filename">The filename.</param>
        /// <remarks>Documented by Dev05, 2007-08-08</remarks>
        public void LoadDictionary(string filename)
        {
            this.filename = filename;
            if (dictionary != null)
                dictionary.Dispose();
            try
            {
                ConnectionStringStruct css = new ConnectionStringStruct(DatabaseType.MsSqlCe, filename);
                MLifter.DAL.Interfaces.IUser user = UserFactory.Create((GetLoginInformation)MLifter.Controls.LoginForm.OpenLoginForm,
                    css, (DataAccessErrorDelegate)delegate { return; }, this);
                css.LmId = User.GetIdOfLearningModule(filename, user);
                user.ConnectionString = css;
                dictionary = user.Open();

                //fetch all cards
                dictionary.PreloadCardCache();
                cards = dictionary.Cards.Cards;
            }
            catch (IOException)
            {
                TaskDialog.MessageBox(Resources.DIC_ERROR_LOADING_LOCKED_CAPTION, Resources.DIC_ERROR_LOADING_LOCKED_CAPTION,
                    String.Format(Resources.DIC_ERROR_LOADING_LOCKED_TEXT, filename), TaskDialogButtons.OK, TaskDialogIcons.Error);
                throw;
            }
            catch (ProtectedLearningModuleException)
            {
                TaskDialog.MessageBox(Resources.DIC_ERROR_LOADING_PROTECTED_CAPTION, Resources.DIC_ERROR_LOADING_PROTECTED_CAPTION,
                    Resources.DIC_ERROR_LOADING_PROTECTED_TEXT, TaskDialogButtons.OK, TaskDialogIcons.Error);
                throw;
            }
            catch (Exception exp)
            {
                Trace.WriteLine("Exception in LoadDictionary: " + exp.ToString());
                TaskDialog.MessageBox(Resources.DIC_ERROR_LOADING_CAPTION, Resources.DIC_ERROR_LOADING_CAPTION,
                    String.Format(Resources.DIC_ERROR_LOADING_TEXT, filename), TaskDialogButtons.OK, TaskDialogIcons.Error);
                throw; //rethrow exception to notify the caller
            }
        }