Ejemplo n.º 1
0
        // 复制或者剪切ListView中选定的事项到Clipboard
        // parameters:
        //      bCut    是否为剪切
        public static void CopyLinesToClipboard(
            Form form,
            string strFormat,
            ListView list,
            bool bCut)
        {
            Cursor oldCursor = form.Cursor;

            form.Cursor = Cursors.WaitCursor;

            MemLineCollection mem_lines = new MemLineCollection();

            mem_lines.Format = strFormat;

            List <int> indices  = new List <int>();
            string     strTotal = "";

            for (int i = 0; i < list.SelectedIndices.Count; i++)
            {
                int index = list.SelectedIndices[i];

                ListViewItem item    = list.Items[index];
                string       strLine = Global.BuildLine(item);
                strTotal += strLine + "\r\n";

                MemLine mem_line = new MemLine();
                mem_line.Item = item;
                mem_line.Tag  = item.Tag;
                mem_lines.Add(mem_line);

                if (bCut == true)
                {
                    indices.Add(index);
                }
            }

            // Clipboard.SetDataObject(strTotal, true);

            DataObject obj = new DataObject();

            obj.SetData(typeof(MemLineCollection), mem_lines);
            obj.SetData(strTotal);
            Clipboard.SetDataObject(obj, true);

            if (bCut == true)
            {
                for (int i = indices.Count - 1; i >= 0; i--)
                {
                    int index = indices[i];
                    list.Items.RemoveAt(index);
                }
            }

            form.Cursor = oldCursor;
        }