public static void ShowControl <TEditorViewer, TSearchViewer>(ref TEditorViewer editorViewerToShow,
                                                                      ref TSearchViewer searchViewerToShow, Control parentControlToAttach, EditorContainerType editorContainerType, ViewerName viewerName,
                                                                      DB_CommonTransactionType commontransactionType,
                                                                      string headerTitle, AbstractViewerType viewerType, bool showAsPopup, bool showInFullScreen = false, bool isSearchPanelexpanded = false)
            where TEditorViewer : Control, new()
            where TSearchViewer : Control, new()
        {
            //1--- Initialize the BaseContainer
            //2--- Initialize the BaseSettingsEditorContainer / BaseSearchContainer
            //3--- Attach the BaseSettingsEditorContainer to BaseContainer
            //4--- Initialize the ViewerToShow
            //5--- Attach the ViewerToShow to BaseSettingsEditorContainer to Top Panel
            //6--- If the ViewerToShow has children Viewers, then >>
            //7--- If Yes :: Initialize Each Child in the ViewerToShow Children
            //8---			 Initialize The CommonTabControl
            //9---			 Create a Tab page for each viewerToShow child
            //10--			 Attach each Child to each suitable Tab page
            //11-- Attach the CommonTabControl to the BaseSettingsEditorContainer Bottom Panel
            //12-- Initialize the ViewerToShow MVCController
            //13-- Initialize the MVCController for Each Child in the ViewerToShow Children

            ParentControl         = parentControlToAttach;
            ViewerName            = viewerName;
            HeaderTitle           = headerTitle;
            CommontransactionType = commontransactionType;

            if (showAsPopup)
            {
                _popupForm = new PopupBaseForm();
                _popupForm.InitializePopupBaseForm(FormWindowState.Maximized, false, headerTitle, FormBorderStyle.None);
                CommonViewsActions.ShowUserControl(ref _baseContainer, _popupForm, true);
            }
            else
            {
                CommonViewsActions.ShowUserControl(ref _baseContainer, parentControlToAttach, true);
            }

            if (_baseContainer == null)
            {
                return;
            }

            if (!_baseContainer.IsBaseControllerInitialized)
            {
                BaseControllerObject = new BaseController <TEntity>();
                _baseContainer.InitializeBaseViewerController(BaseControllerObject);
            }

            _baseContainer.InitializeBaseContainer(ViewerName, viewerType, headerTitle, false, true, true, true);

            if (editorViewerToShow == null || editorViewerToShow.IsDisposed)
            {
                editorViewerToShow = new TEditorViewer();
            }
            if (searchViewerToShow == null || editorViewerToShow.IsDisposed)
            {
                searchViewerToShow = new TSearchViewer();
            }

            _baseContainer._editorViewerToShow = editorViewerToShow;

            EditorViewer = (IViewer)editorViewerToShow;
            SearchViewer = (IViewer)searchViewerToShow;

            if (EditorViewer != null)
            {
                EditorViewer.ClearControls();
                EditorViewer.FillControls();
            }

            if (SearchViewer != null)
            {
                SearchViewer.ClearControls();
                SearchViewer.FillControls();
            }

            switch (viewerType)
            {
            case AbstractViewerType.EditorViewer:
                MVCEditorController = GenerateEditorMVCController(EditorViewer, null, editorContainerType, viewerName, viewerType);
                break;

            case AbstractViewerType.SearchViewer:
                MVCSearchController = GenerateEditorMVCController(SearchViewer, null, editorContainerType, viewerName, viewerType);
                break;
            }

            switch (viewerType)
            {
            case AbstractViewerType.EditorViewer:
                if (_baseEditorContainer == null)
                {
                    return;
                }
                _baseEditorContainer._editorViewer         = (Control)EditorViewer;
                _baseEditorContainer.CommonTransactionType = CommontransactionType;
                if (BaseControllerObject != null)
                {
                    BaseControllerObject.PassMVCController(editorContainerType, viewerType);
                }
                _baseEditorContainer.InitializeBaseEditorContainer(true, false, false);
                break;

            case AbstractViewerType.SearchViewer:
                if (_baseSearchContainer == null)
                {
                    return;
                }
                _baseSearchContainer._searchViewer = (Control)SearchViewer;
                if (BaseControllerObject != null)
                {
                    BaseControllerObject.PassMVCController(editorContainerType, viewerType);
                }
                _baseSearchContainer.InitializeBaseSearchContainer(isSearchPanelexpanded);
                _baseSearchContainer.LoadGrid();
                break;
            }

            if (showAsPopup && _popupForm != null)
            {
                _popupForm.Show();
            }
        }