Как автоматически сохранить и автоматически загрузить все свойства в winforms C #? - PullRequest
3 голосов
/ 16 января 2010

Как автоматически сохранить все свойства winforms при закрытии и автоматически загрузить все свойства winforms при загрузке? C #

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace SControl
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < Controls.Count; i++)
            {
                System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(typeof(Controls[i]));
                Stream stream = File.Open("test.xml", FileMode.Create);
                x.Serialize(stream, Controls[i]);
            }
        }
    }
}

Ответы [ 4 ]

6 голосов
/ 16 января 2010

Ваш вопрос немного неясен, но

Если вам требуется сохранение / загрузка Макета формы , взгляните на

Пользовательские настройки Windows Forms в C #

Если вам требуется сохранение / загрузка объекта / класса , посмотрите

Загрузка и сохранение объектовв XML с использованием сериализации

РЕДАКТИРОВАТЬ:

Это покажет вам, как сохранить определенные настройки для свойств формы.

Сохранитьи восстановление настроек формы .NET с использованием XML

Также обратите внимание на Уровень автоматизации приложений - Использование XML для динамической генерации элементов графического интерфейса - формы и элементы управления

Все это направит вас в нужном направлении.

Я думаю, что главная цель здесь

  • Выяснить, когда сохранять, а когда загружать и гдесохранить / восстановить эти настройки.
  • Сохраняете ли вы эти настройки для каждого пользователя?В базе данных?В XML-файле?
  • Далее необходимо указать, какие свойства вы будете сохранять / восстанавливать для каждого элемента управления.Простые настройки местоположения / размера могут не обрезать его, поскольку элементы управления будут иметь различные сложности (Button, TextBox, Gridview, ListView)
  • Теперь вам нужно выяснить, как выполнить итерацию ВСЕХ элементов управления в форме.Кнопки, текстовые поля, панели, элементы управления в элементах управления (элементы управления в панелях) и, возможно, даже ваши пользовательские элементы управления.Это можно сделать с помощью рекурсии.
  • Теперь вам нужно определиться со структурой XML-файла (если вы решите использовать XML).Это должно выглядеть очень похоже на древовидную структуру, как если бы вы смотрели на форму, ее элементы управления и элементы управления, как на древовидную структуру.
0 голосов
/ 16 января 2010

Процесс превращения таких объектов, как формы, во что-то, что можно сохранить, называется сериализацией. К сожалению, я не думаю, что в WinForm есть готовый способ сериализации форм. Я нашел Как клонировать / сериализовать / копировать и вставить элемент управления Windows Forms , и поскольку формы также являются элементами управления, вы можете сериализовать свойства с помощью кода.

0 голосов
/ 16 января 2010

Вы должны вручную указать, какие свойства должны быть сохранены.

Удобным способом является присвоение этих персонализированных настроек Настройки приложения Windows Forms .

Пример кода:

//save the winform position and size upon closing
private void Form1_FormClosed(
   object sender, FormClosedEventArgs e)
{
    Properties.Settings.Default.FormPosition = this.Location;
    Properties.Settings.Default.FormSize = this.Size;
    Properties.Settings.Default.Save();
}

//load the winform position and size upon loading
private void Form1_Load(object sender, EventArgs e)
{
    this.Size = Properties.Settings.Default.FormSize;
    this.Location = Properties.Settings.Default.FormPosition;
}

Больше ссылок:

0 голосов
/ 16 января 2010

Я не знаю ни одного автоматического метода, встроенного в базовый класс Form, но добавить его самостоятельно не сложно.

Вы можете нажать на окно загрузки и закрытия событий, чтобы кэшировать все соответствующие свойства в резервном хранилище, а затем перезагрузить их позже.

Зарегистрируйте обработчик событий для обработчиков событий Form.Load и Form.Closing. Когда происходит Form.Closing, сохраните состояние формы в файл или базу данных. Когда происходит Form.Load, проверьте, присутствует ли сохраненное состояние, и если да, перезагрузите объект from из сохраненного состояния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...