Member 10452637 Ответов: 2

Как сохранить новый интерфейс приложения после закрытия окна приложения


Hi Guys!
I'm working a project with window form and C#.
My idea for this project is, when the user run app, they can change interface of app, Example: Create new label, change the label location, or change color of button.
Therefore I want my apps can save all change interface by user after close app.
Below is my code, i just write for it create new label.
if can, please share me your code or your project you did it.
Thanks!


Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Form1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        bool selected = false;
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        int B = 1;
        public System.Windows.Forms.Label AddNewLabel()
        {
            System.Windows.Forms.Label newLabel = new System.Windows.Forms.Label();
            this.Controls.Add(newLabel);
            newLabel.Top = B * 28;
            newLabel.Left = 50;
            newLabel.Text = "DOOR EXIT " + this.B.ToString();
            B = B + 1;
            newLabel.BorderStyle = BorderStyle.FixedSingle;
            newLabel.TextAlign = ContentAlignment.MiddleCenter;
            return newLabel;
        }
        private void btn_Create_Click_1(object sender, EventArgs e)
        {
            AddNewLabel();
        }
    }
}

2 Ответов

Рейтинг:
0

Manoj Kumar Choubey

Для этого можно создать класс генерации элементов управления, а объект класса можно сериализовать и десериализовать, а также сохранить в файле или БД.
Второй подход вы можете определить некоторые обозначения метаданных для элементов управления и их свойств и сохранить их в базе данных или xml-файле в соответствии с вашими требованиями.


Member 10452637

Да, Спасибо! Я попробовал с вашим предложением, и он может сериализоваться в файл, когда я нажимаю кнопку резервного копирования, но когда я нажимаю кнопку [Восстановить] в своем интерфейсе, он не может десериализоваться. Не могли бы вы мне помочь, пожалуйста! мой код находится ниже:
класс "setting infor" для использования take tpye of label

Рейтинг:
0

Member 10452637

<pre>using System;                     
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Xml.Serialization;

namespace Form1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        List<Label> listLabel = new List<Label>();
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        int B = 1;
        private void btn_Create_Click_1(object sender, EventArgs e)
        {
            System.Windows.Forms.Label newLabel = new System.Windows.Forms.Label();
            this.Controls.Add(newLabel);
            newLabel.Top = B * 28;
            newLabel.Left = 50;
            newLabel.Text = "DOOR EXIT " + this.B.ToString();
            B = B + 1;
            newLabel.BorderStyle = BorderStyle.FixedSingle;
            newLabel.TextAlign = ContentAlignment.MiddleCenter;
            listLabel.Add(newLabel);
        }
        void SerializeButton()
        {

        }
        void Serialize()
        {
            StreamWriter sw = new StreamWriter(new FileStream("Setting.TestSave", FileMode.Create));
            XmlSerializer seri2 = new XmlSerializer(typeof(int));
            seri2.Serialize(sw, listLabel.Count);
            foreach (var item in listLabel)
            {
                SettingInfor info = new SettingInfor();
                info.text = item.Text;
                info.location = item.Location;                
                XmlSerializer seri = new XmlSerializer(typeof(SettingInfor));                
                seri.Serialize(sw, info);
            }
            sw.Close();
        }
        void Deserialize()
        {
            listLabel.Clear();
            StreamReader sr = new StreamReader(new FileStream("Setting.TestSave", FileMode.Open));
            XmlSerializer seri2 = new XmlSerializer(typeof(int));
            //seri2.Serialize(sw, listLabel.Count);
            
            for (int i = 0; i<(int)seri2.Deserialize(sr);i++)
            {
                XmlSerializer seri = new XmlSerializer(typeof(SettingInfor));
                SettingInfor info = new SettingInfor();
                info = (SettingInfor)seri.Deserialize(sr);

                Label newLabel = new Label();
                newLabel.Text = info.text;
                newLabel.Location = info.location;
                listLabel.Add(newLabel);
                this.Controls.Add(newLabel);
               
            }
            sr.Close();
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            Serialize();
        }

        private void btnRestore_Click(object sender, EventArgs e)
        {

        }
    }
}

использование системы;
использование системы.Коллекции.Общий;
использование системы.Рисование;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;
пространство имен класса form1
{
открытый класс SettingInfor
{
открытый текст строки;
расположение общественной точки;
}
}