Скопируйте и вставьте данные в C#
Пример
Ключ состоит в том, чтобы сделать одну переменную, удерживая весь чертеж, и пометить его как сериализуемую. Затем вы можете копировать экземпляры этого класса в буфер обмена.
В этом примере хранится информация о чертеже в следующем классе Polyline.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
[Serializable()] public class Polyline { [XmlIgnore] public Color Color = Color.Black; public int Thickness = 1; public DashStyle DashStyle = DashStyle.Solid; public List<Point> Points = new List<Point>(); // Получить или установить цвет как значение ARGB. public int Argb { get { return this.Color.ToArgb(); } set { Color = Color.FromArgb(value); } } public void Draw(Graphics gr) { using (Pen the_pen = new Pen(Color, Thickness)) { the_pen.DashStyle = DashStyle; if (DashStyle == DashStyle.Custom) { the_pen.DashPattern = new float[] { 10, 2 }; } gr.DrawLines(the_pen, Points.ToArray()); } } } |
Единственная важная часть здесь состоит в том, что класс помечен атрибутом Serializable.
Основная программа хранит ряд объектов Polyline в следующем списке.
1 2 |
// Полилинии, которые мы рисуем. private List<Polyline> Polylines = new List<Polyline>(); |
Следующий код копирует текущий чертеж в буфер обмена.
1 2 3 4 5 |
// Скопируйте записную книжку в буфер обмена. private void mnuEditCopy_Click(object sender, EventArgs e) { Clipboard.SetDataObject(Polylines); } |
Следующий код вставляет рисунок в буфер обмена.
1 2 3 4 5 6 7 8 9 10 11 12 |
// Вставьте каракули из буфера обмена. private void mnuEditPaste_Click(object sender, EventArgs e) { IDataObject data_object = Clipboard.GetDataObject(); if (data_object.GetDataPresent(Polylines.GetType())) { Polylines = (List<Polyline>)data_object.GetData( Polylines.GetType()); if (Polylines == null) Polylines = new List<Polyline>(); picCanvas.Refresh(); } } |
Этот код использует метод GetDataObject буфера обмена для получения объекта данных буфера обмена. Если метод GetDataPresent этого объекта указывает, что List & lt; Polyline & gt; , код использует метод GetData объекта данных для его получения. Он преобразует возвращенный общий объект в List & lt; Polyline & gt;, сохраняет результат в переменной Polylines программы и перерисовывает.