예제 #1
0
        private void DoCopy(bool ToClipboard)
        {
            if (Xls == null)
            {
                MessageBox.Show("Please push the New File button before copying");
                return;
            }

            //VERY IMPORTANT!!!!!
            //****************************************************************************
            //The MemoryStreams CAN NOT BE DISPOSED UNTIL WE CALL Clipboard.SetObjectData.
            //Even when we assigned the Stream with the DataObject Data, it is still in use and can't be freed.
            //****************************************************************************

            try
            {
                DataObject          data        = new DataObject();
                List <MemoryStream> dataStreams = new List <MemoryStream>(); //we will use this list to dispose the memorystreams after they have been used.
                try
                {
                    foreach (FlexCelClipboardFormat cf in Enum.GetValues(typeof(FlexCelClipboardFormat)))
                    {
                        MemoryStream dataStream = new MemoryStream();
                        dataStreams.Add(dataStream);
                        Xls.CopyToClipboard(cf, dataStream);
                        dataStream.Position = 0;
                        data.SetData(FlexCelDataFormats.GetString(cf), dataStream);
                    }
                    if (ToClipboard)
                    {
                        Clipboard.SetDataObject(data, true);
                    }
                    else
                    {
                        DoDragDrop(data, DragDropEffects.Copy);
                    }
                }
                finally
                {
                    foreach (MemoryStream ms in dataStreams)
                    {
                        ms.Dispose();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
예제 #2
0
파일: MainForm.cs 프로젝트: mwilian/demos
        private object GetConfigSheet(ref MemoryStream xlsStream)
        {
            xlsStream = null;
            try
            {
                XlsFile  Xls = new XlsFile();
                Assembly a   = Assembly.GetExecutingAssembly();

                /*This will not work on Delphi, since it does not embed the xls files as resources
                 * using (Stream MemStream = a.GetManifestResourceStream("FlexCelDesigner.Config.xls"))
                 * {
                 *  Xls.Open(MemStream);
                 * }
                 */

                System.Resources.ResourceManager rm = new System.Resources.ResourceManager("TVCDesigner.Config", a);
                byte[] WbData = (byte[])rm.GetObject("Config_xls");
                using (Stream MemStream = new MemoryStream(WbData))
                {
                    Xls.Open(MemStream);
                }

                StringBuilder textString = new StringBuilder();
                xlsStream = new MemoryStream();
                //Do NOT DISPOSE THE STREAM. We could, if we called BegingDrag or CopyToClipHere. We can't dispose it till we call those methods.
                {
                    Xls.CopyToClipboard(textString, xlsStream);
                    xlsStream.Position = 0;
                    DataObject data = new DataObject();
                    data.SetData(FlexCelDataFormats.Excel97, xlsStream);
                    data.SetData(DataFormats.Text, textString.ToString());
                    return(data);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return(null);
        }