在C#窗体上保存/加载输入?

时间:2011-08-15 10:20:06

标签: c# winforms visual-studio-2008 file-io

我开发了一个基于C#表单的应用程序。它由许多文本框和几个单选按钮组成。如果我想为这个应用程序创建我自己的唯一文件类型(例如 - * .ct),我将如何去做呢?我想要实现的是用户能够进行文件保存 - 然后它将保存一个* .ct文件,这将是他们输入到文本框中的信息以及他们选择的单选按钮。我想在运行应用程序时有一个选项 - 文件 - >打开,他们可以打开* .ct文件然后填充复选框并选择他们选择的单选按钮。如果有人可以指出我已经完成的任何代码链接,或者粘贴我可以从中工作的任何示例,那将是一个很大的帮助。

感谢。

4 个答案:

答案 0 :(得分:2)

我建议你把文件保存为XML,然后当你读取xml文件时,你可以验证它的模式,以确定你的应用程序是否可以读取它。

Xml Files是商店信息的标准。这也允许您的应用程序可能在将来使用标准格式在另一个应用程序之间进行通信。哪个是xml文件。

答案 1 :(得分:2)

看起来您想要快速轻松地将文件内容映射到Windows窗体控件。

如果是这种情况,那么你应该看一下创建一个代表windows窗体各种状态的类 - 生成字符串属性的文本框内容,复选框作为布尔属性等。

一旦你创建了这个类,你就可以将它的一个实例数据绑定到所有的windows窗体控件,这意味着windows形式数据绑定过程将保持ui和类同步。

最后一步是保存并加载该数据。为了对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 :(得分:0)

How to associate a file extension to the current executable in C#会有所帮助:答案实际上取决于您部署应用的方式。

答案 3 :(得分:0)

文件关联由windows处理。用户可以告诉用什么类型的应用程序打开具有特定扩展名的文件。

在您的情况下,您将* .ct与您的exe文件关联。然后将完整路径作为参数提供给主函数。因此,您需要在关联扩展名时处理文件参数。

对于文件打开和保存,有一个组件可以显示文件打开和保存对话框。您可以将它们配置为仅显示* .ct。