Скопируйте и вставьте данные в C#

Пример Сохранить и восстановить фотографии нарисованный пользователем в C# , показывает, как сделать простую программу рисования. Пример Копирование и вставка объектов в буфер обмена в C# показывает, как копировать объекты в буфер обмена. Этот пример объединяет два примера, чтобы сделать программу scribble, которая позволяет копировать и вставлять чертежи.

Ключ состоит в том, чтобы сделать одну переменную, удерживая весь чертеж, и пометить его как сериализуемую. Затем вы можете копировать экземпляры этого класса в буфер обмена.

В этом примере хранится информация о чертеже в следующем классе Polyline.

[Serializable()]
public class Polyline
{
    [XmlIgnore] public Color Color = Color.Black;
    public int Thickness = 1;
    public DashStyle DashStyle = DashStyle.Solid;
    public List Points = new List();

    // Получить или установить цвет как значение 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 в следующем списке.

// Полилинии, которые мы рисуем.
private List Polylines = new List();

Следующий код копирует текущий чертеж в буфер обмена.

// Скопируйте записную книжку в буфер обмена.
private void mnuEditCopy_Click(object sender, EventArgs e)
{
    Clipboard.SetDataObject(Polylines);
}

Следующий код вставляет рисунок в буфер обмена.

// Вставьте каракули из буфера обмена.
private void mnuEditPaste_Click(object sender, EventArgs e)
{
    IDataObject data_object = Clipboard.GetDataObject();
    if (data_object.GetDataPresent(Polylines.GetType()))
    {
        Polylines = (List)data_object.GetData(
            Polylines.GetType());
        if (Polylines == null) Polylines = new List();
        picCanvas.Refresh();
    }
}

Этот код использует метод GetDataObject буфера обмена для получения объекта данных буфера обмена. Если метод GetDataPresent этого объекта указывает, что List & lt; Polyline & gt; , код использует метод GetData объекта данных для его получения. Он преобразует возвращенный общий объект в List & lt; Polyline & gt;, сохраняет результат в переменной Polylines программы и перерисовывает.

Источник: http://csharphelper.com/blog/2016/03/copy-and-paste-scribble-data-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector