Сохранение и восстановление чертежей линий в C#
Пример
Первый шаг - сохранить всю информацию о чертеже в одном объекте. Вы можете сохранить информацию в массиве или списке, но это, вероятно, проще всего, если вы сохраните все в объекте из определенного вами класса.
В предыдущей версии программы сохранялись конечные точки сегментов линии в двух списках точек. В этом примере для представления рисунка используется следующий класс.
// Класс для сериализации и десериализации чертежей. public class Drawing { public ListPt1 = new List (); public List Pt2 = new List (); }
Основная программа использует следующий объект для хранения точек линий.
// Точки, составляющие сегменты линий. private Drawing TheDrawing = new Drawing();
Большая часть кода основной программы похожа на предыдущую версию, за исключением того, что использует этот объект вместо отдельных списков точек.
Следующий код показывает, как программа сохраняет чертеж.
// Сохраните сериализацию чертежа. private void mnuFileSaveAs_Click(object sender, EventArgs e) { if (sfdSave.ShowDialog() == DialogResult.OK) { // Сериализация. XmlSerializer xml_serializer = new XmlSerializer(TheDrawing.GetType()); using (StreamWriter stream_writer = new StreamWriter(sfdSave.FileName)) { xml_serializer.Serialize(stream_writer, TheDrawing); stream_writer.Close(); } } }
В этом коде отображается SaveFileDialog. Если пользователь выбирает файл и нажимает кнопку «Сохранить», код создает XmlSerializer для работы с типом объекта TheDrawing. Он создает StreamWriter для записи в нужный файл, а затем использует сериализатор для записи сериализации объекта чертежа в файл.
Следующий код показывает, как программа загружает сохраненный чертеж.
// Загрузите сериализацию чертежа. private void mnuFileOpen_Click(object sender, EventArgs e) { if (ofdLoad.ShowDialog() == DialogResult.OK) { try { XmlSerializer xml_serializer = new XmlSerializer(TheDrawing.GetType()); using (FileStream file_stream = new FileStream(ofdLoad.FileName, FileMode.Open)) { Drawing new_drawing = (Drawing)xml_serializer.Deserialize(file_stream); TheDrawing = new_drawing; picCanvas.Refresh(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } } }
В этом коде отображается OpenFileDialog. Если пользователь выбирает файл и нажимает «Открыть», код создает XmlSerializer для работы с типом объекта TheDrawing. Он создает StreamWriter для чтения из выбранного файла и затем использует сериализатор для десериализации данных в файле, преобразуя результат в объект Drawing. Если все это удастся, код сохранит новый объект Рисование в переменной TheDrawing и перерисовывает.