繁体   English   中英

在 C# windows 表格上保存/加载输入?

[英]Save/Load inputs on C# windows form?

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

谢谢。

我建议您将文件保存为 XML,然后当您阅读 xml 文件时,您可以验证它的架构以确定您的应用程序是否可以读取它。

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

看起来您想要快速轻松地执行 map 文件的内容到您的 windows forms 控件。

如果是这种情况,那么您应该考虑创建一个 class 代表您的 windows 表单的各种状态 - 文本框内容位于字符串属性中,复选框为 boolean 属性等。

Once you have create that class you can then databind an instance of it to all your windows forms controls, this will mean that the windows forms databinding process will keep the ui and the class in sync for you.

最后一步是保存和加载该数据。 为此,对 C# 序列化进行一些调查,有很多关于如何将 class 写入文件表示的教程,您需要做的唯一工作是将一些属性应用于 ZA2F2ED4F8EBC2CBB4C21A29DC40AB6 中的方法序列化命名空间。


这是一些非常快速的代码,显示了具有单个文本框和三个单选按钮的示例表单的数据绑定。 您将需要针对您的真实案例进行试验,以正确实现您的支持 class - 单选按钮和单选按钮组可能有点棘手。

我确信代码可以改进,但它只是为了展示这种方法。

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 的实例,您将改为从文件中反序列化 class(如果存在)。

这种方法在某种程度上导致了 MVVM 方法,其中 class 用于支持绑定,就像视图 Model - 我建议进入这种心态,因为您不希望绑定 ZA2F2ED4F8EBC2CBB4C21A29DC40AB6 开始包含逻辑它只是为了给你一些可以绑定的东西和一些可以序列化的东西来代表你的表单——你应该有其他包含你实际 Model 对象的逻辑。


我不会显示序列化的代码——网上有很多例子。 这是 MSDN 文章的链接,这将是一个很好的第一步: http://msdn.microsoft.com/en-us/library/ms950721.aspx

如何将文件扩展名关联到 C# 中的当前可执行文件将很有帮助:答案实际上取决于您如何部署应用程序。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM