//=====================================
        //  Add to Redo/Undo List
        //=====================================
        private void AddToRedoUndoList()
        {
            // Clear Any Redo Elements if No Longer needed
            while (lRedoUndoList.Count() > iCurrentElementInRedoUndoList)
            {
                lRedoUndoList.RemoveAt(lRedoUndoList.Count() - 1);
            }

            // Add an UndoRedo Element to the List
            RedoUndoInfo RedoUndoinfo = new RedoUndoInfo();

            //////////////////////////////////////////////////////////////////////////////////////////////////////////
            RedoUndoinfo.BackgroundImageName = sBackgroundImageName;
            RedoUndoinfo.FullPathToImage     = sFullPathToImage;
            //////////////////////////////////////////////////////////////////////////////////////////////////////////
            RedoUndoinfo.AudioName            = sAudioName;
            RedoUndoinfo.AudioInfoTextBoxText = AudioInfo_TextBox.Text;
            RedoUndoinfo.AudioLoopStart_NumericUpDownValue = (int)AudioLoopStart_NumericUpDown.Value;
            RedoUndoinfo.AudioLoopEnd_NumericUpDownValue   = (int)AudioLoopEnd_NumericUpDown.Value;
            // Add Weather ///////////////////////////////////////////////////////////////////////////////////////////
            RedoUndoinfo.lWeatherEffectOne = new List <WeatherInfo>();
            foreach (WeatherInfo Weather in lWeatherEffectOne)
            {
                WeatherInfo Weath; Weath.H = Weather.H; Weath.Texture = Weather.Texture; Weath.Type = Weather.Type;
                Weath.W = Weather.W; Weath.X = Weather.X; Weath.Y = Weather.Y;
                RedoUndoinfo.lWeatherEffectOne.Add(Weath);
            }
            RedoUndoinfo.lWeatherEffectTwo = new List <WeatherInfo>();
            foreach (WeatherInfo Weather in lWeatherEffectTwo)
            {
                WeatherInfo Weath; Weath.H = Weather.H; Weath.Texture = Weather.Texture; Weath.Type = Weather.Type;
                Weath.W = Weather.W; Weath.X = Weather.X; Weath.Y = Weather.Y;
                RedoUndoinfo.lWeatherEffectTwo.Add(Weath);
            }
            RedoUndoinfo.WeatherEffect1_ComboBoxSelectedIndex     = WeatherEffect1_ComboBox.SelectedIndex;
            RedoUndoinfo.WeatherEffect2_ComboBoxSelectedIndex     = WeatherEffect2_ComboBox.SelectedIndex;
            RedoUndoinfo.WeatherEffectOnePower_NumericUpDownValue = (int)WeatherEffectOnePower_NumericUpDown.Value;
            RedoUndoinfo.WeatherEffectTwoPower_NumericUpDownValue = (int)WeatherEffectTwoPower_NumericUpDown.Value;
            //////////////////////////////////////////////////////////////////////////////////////////////////////////
            RedoUndoinfo.TileRows_NumericUpDownValue = (int)TileRows_NumericUpDown.Value;
            RedoUndoinfo.TileCols_NumericUpDownValue = (int)TileCols_NumericUpDown.Value;
            //////////////////////////////////////////////////////////////////////////////////////////////////////////
            RedoUndoinfo.lLevelDataList = new List <List <LevelInfo> >();
            foreach (List <LevelInfo> LevelInfoList in lLevelInfoList)
            {
                List <LevelInfo> LevInfoList = new List <LevelInfo>();
                foreach (LevelInfo LevInfo in LevelInfoList)
                {
                    LevelInfo Levelinfo = new LevelInfo();
                    Levelinfo.X           = LevInfo.X; Levelinfo.Y = LevInfo.Y; Levelinfo.W = LevInfo.W; Levelinfo.H = LevInfo.H;
                    Levelinfo.TextureName = LevInfo.TextureName; Levelinfo.Texture = LevInfo.Texture;
                    LevInfoList.Add(Levelinfo);
                }
                RedoUndoinfo.lLevelDataList.Add(LevInfoList);
            }
            //////////////////////////////////////////////////////////////////////////////////////////////////////////
            lRedoUndoList.Add(RedoUndoinfo);
            iCurrentElementInRedoUndoList++;
        }
        private void PerformRedoUndo(int RedoUndoElement)
        {
            // Make sure we are within range
            if ((RedoUndoElement >= 0) && (lRedoUndoList.Count() > RedoUndoElement))
            {
                RedoUndoInfo RedoUndo = lRedoUndoList.ElementAt(RedoUndoElement);
                ///////////////////////////////////////////////////////////////////////////////////
                // Get Image Info
                sBackgroundImageName = RedoUndo.BackgroundImageName;
                sFullPathToImage     = RedoUndo.FullPathToImage;
                if (sFullPathToImage != null && System.IO.File.Exists(sFullPathToImage))
                {
                    MapPanel.BackgroundImage = Image.FromFile(sFullPathToImage);
                }
                else
                {
                    MapPanel.BackgroundImage = null;
                }
                ///////////////////////////////////////////////////////////////////////////////////
                // Get Audio Info
                sAudioName                         = RedoUndo.AudioName;
                AudioInfo_TextBox.Text             = RedoUndo.AudioInfoTextBoxText;
                AudioLoopStart_NumericUpDown.Value = RedoUndo.AudioLoopStart_NumericUpDownValue;
                AudioLoopEnd_NumericUpDown.Value   = RedoUndo.AudioLoopEnd_NumericUpDownValue;
                ///////////////////////////////////////////////////////////////////////////////////
                // Get Weather Info
                lWeatherEffectOne = RedoUndo.lWeatherEffectOne;
                lWeatherEffectTwo = RedoUndo.lWeatherEffectTwo;

                WeatherEffect1_ComboBox.SelectedIndex     = RedoUndo.WeatherEffect1_ComboBoxSelectedIndex;
                WeatherEffect2_ComboBox.SelectedIndex     = RedoUndo.WeatherEffect2_ComboBoxSelectedIndex;
                WeatherEffectOnePower_NumericUpDown.Value = RedoUndo.WeatherEffectOnePower_NumericUpDownValue;
                WeatherEffectTwoPower_NumericUpDown.Value = RedoUndo.WeatherEffectTwoPower_NumericUpDownValue;
                ///////////////////////////////////////////////////////////////////////////////////
                // Get Numeric Up/Downs Info
                TileRows_NumericUpDown.Value = oMapGrid.TileRowsValue = RedoUndo.TileRows_NumericUpDownValue;
                TileCols_NumericUpDown.Value = oMapGrid.TileColsValue = RedoUndo.TileCols_NumericUpDownValue;
                ///////////////////////////////////////////////////////////////////////////////////
                // Get Level Data
                lLevelInfoList = RedoUndo.lLevelDataList;

                // Invalidate the Map
                MapPanel.Invalidate();
            }
        }