Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否在C windows窗体上保存/加载输入?_C#_Winforms_Visual Studio 2008_File Io - Fatal编程技术网

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

C# 是否在C windows窗体上保存/加载输入?,c#,winforms,visual-studio-2008,file-io,C#,Winforms,Visual Studio 2008,File Io,我开发了一个基于C表单的应用程序。它由许多文本框和几个单选按钮组成。如果我想为这个应用程序创建我自己独特的文件类型,例如-*.ct,我该怎么做?我想要实现的是用户能够进入文件保存-然后它将保存一个*.ct文件,该文件将是他们在文本框中输入的信息以及他们选择的单选按钮。然后,我希望在他们运行应用程序时有一个选项-File->Open,他们可以打开*.ct文件,然后填充复选框并选择他们选择的单选按钮。如果有人能给我指出他们看到的代码的任何链接,等等,或者粘贴任何我可以使用的示例,那将是一个很大的帮助

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


谢谢。

会有帮助:答案取决于你如何部署你的应用。

会有帮助:答案取决于你如何部署你的应用。

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

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


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

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

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


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

我建议您将文件另存为XML,然后在读取XML文件时,您可以验证其模式,以确定应用程序是否可以读取该文件


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

我建议您将文件另存为xml,然后在读取xml文件时,您可以验证其模式,以确定应用程序是否可以读取它


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

它看起来像是您想要快速、轻松地将文件内容映射到windows窗体控件的操作

如果是这种情况,那么您应该考虑创建一个表示windows窗体各种状态的类-文本框内容以字符串属性、复选框作为布尔属性等形式存在

创建该类后,可以将其实例数据绑定到所有windows窗体控件,这意味着windows窗体数据绑定过程将为您保持ui和类的同步

最后一步是保存并加载该数据。为了在to 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文章的链接,这将是一个很好的第一步:

它看起来像是您想要快速轻松地将文件内容映射到windows窗体控件的操作

如果是这种情况,那么您应该考虑创建一个表示windows窗体各种状态的类-文本框内容位于字符串属性中,复选框为布尔值 财产等

创建该类后,可以将其实例数据绑定到所有windows窗体控件,这意味着windows窗体数据绑定过程将为您保持ui和类的同步

最后一步是保存并加载该数据。为了在to 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文章的链接,这将是一个很好的第一步:

你好,大卫-是的,这正是我想做的。如果用户在textbox1中输入“Hello”,在textbox2中输入“Test”,然后选择单选按钮a或B,我想将该信息保存到文件中。如果应用程序然后运行,我想加载这个文件和textbox1将包含'你好',等等。嗨,大卫-是的,这是我想做的更多。如果用户在textbox1中输入“Hello”,在textbox2中输入“Test”,然后选择单选按钮a或B,我想将该信息保存到文件中。如果应用程序运行,我想加载这个文件,textbox1将包含“Hello”等内容。