Сохранить / загрузить входы в C # окна формы? - PullRequest
1 голос
/ 15 августа 2011

Я разработал приложение на основе C #. Он состоит из нескольких текстовых полей и нескольких переключателей. Если я хочу создать свой собственный уникальный тип файла для этого приложения (например, - * .ct), как мне это сделать? Я хочу, чтобы пользователь мог перейти к сохранению файла - он затем сохранит файл * .ct, который будет информацией, введенной им в текстовые поля, и переключателями, которые он выбрал. Затем я хотел бы иметь возможность, когда они запускают приложение - Файл -> Открыть, и они могут открыть файл * .ct, а затем заполнить флажки и выбрать радиокнопки, которые они выбрали. если кто-то может указать мне какие-либо ссылки на код, где они видели это, и т. д. или вставить любые примеры, из которых я могу работать, это было бы очень полезно.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 15 августа 2011

Похоже, что вы хотите сделать быстро и легко сопоставить содержимое файла с вашими элементами управления форм Windows.

Если это так, то вам следует взглянуть на создание класса, который представляет различные состояния формы Windows - содержимое текстовых полей, живущих в строковых свойствах, флажки в виде логических свойств и т. Д.

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

Последний шаг - сохранение и загрузка этих данных. Для этого проведем некоторое исследование в сериализации C #, есть много обучающих программ о том, как записать класс в представление файла, где единственная работа, которую вам нужно сделать, это применить несколько атрибутов к классу и вызвать правильные методы из пространство имен сериализации.


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

Я уверен, что код можно улучшить, но он просто предназначен для демонстрации подхода.

public partial class Form2 : Form
{
    private BindingClass backingClass;

    public Form2()
    {
        InitializeComponent();

        backingClass = new BindingClass();
        backingClass.Name = "Hippo";
        backingClass.One = true;

        textBox1.DataBindings.Add("Text", backingClass, "Name");

        radioButton1.DataBindings.Add("Checked", backingClass, "One");
        radioButton2.DataBindings.Add("Checked", backingClass, "Two");
        radioButton3.DataBindings.Add("Checked", backingClass, "Three");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(backingClass.Name);
        if (backingClass.One)
        {
            MessageBox.Show("One");
        }
        if (backingClass.Two)
        {
            MessageBox.Show("Two");
        }
        if (backingClass.Three)
        {
            MessageBox.Show("Three");
        }
    }
}

public class BindingClass
{
    private bool one;
    private bool two;
    private bool three;

    public string Name { get; set; }

    public bool One {
        get { return one;}
        set
        {

                one = value;
                two = !value;
                three = !value;           
        }
    }
    public bool Two
    {
        get { return two; }
        set
        {

            two = value;
            one = !value;
            three = !value;    
        }
    }
    public bool Three
    {
        get { return three; }
        set
        {

            three = value;
            one = !value;
            two = !value;    
        }
    }
}

Там, где я создаю экземпляр моего BindingClass выше, вы вместо этого десериализуете класс из вашего файла, если он существует.

Этот подход в некотором роде ведет к подходу MVVM, где класс, используемый для поддержки связывания, очень похож на модель представления - я бы порекомендовал войти в это мышление, поскольку вы не хотите, чтобы класс связывания начинал содержать логику. Это только для того, чтобы дать вам что-то, с чем можно связываться, и что-то для сериализации, представляющее вашу форму - у вас должна быть другая логика, содержащая объекты, которые вы на самом деле являетесь Моделью.


Я не буду показывать код для сериализации - для этого есть много примеров. Вот ссылка на статью MSDN, которая будет хорошим первым шагом: http://msdn.microsoft.com/en-us/library/ms950721.aspx

2 голосов
/ 15 августа 2011

Я бы посоветовал вам сохранить файл в формате XML, тогда, когда вы читаете XML-файл, вы можете проверить его схему, чтобы определить, может ли ваше приложение его прочитать.

XML-файлы - это стандарт для хранения информации. Это также позволяет вашему приложению, возможно, в будущем установить связь между другим приложением в стандартном формате. Которые являются XML-файлами.

0 голосов
/ 15 августа 2011

Ассоциации файлов обрабатываются окнами.Пользователь может сказать, какой тип приложения используется для открытия файла с определенным расширением.

В вашем случае вы бы ассоциировали * .ct с вашим exe-файлом.Полный путь затем предоставляется в качестве параметра основной функции.Таким образом, вам нужно обработать аргумент файла при ассоциировании расширения.

Для открытия и сохранения файла существует компонент для отображения диалогов открытия и сохранения файла.Вы можете настроить их на показ только * .ct.

0 голосов
/ 15 августа 2011

Как связать расширение файла с текущим исполняемым файлом в C # будет полезно: ответ действительно зависит от того, как вы развернете свое приложение.

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