【问题标题】:Save/Load inputs on C# windows form?在 C# windows 窗体上保存/加载输入?
【发布时间】:2011-08-15 10:20:06
【问题描述】:

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      看起来您想要快速轻松地将文件内容映射到 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

      【讨论】:

      • 嗨,大卫 - 是的,这正是我想做的。如果用户在 textbox1 中输入“Hello”,在 textbox2 中输入“Test”并选择单选按钮 A(选择 A 或 B) - 我想将该信息保存到文件中。如果应用程序随后运行,我想加载此文件,textbox1 将包含“Hello”等。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-13
          • 1970-01-01
          • 1970-01-01
          • 2018-10-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多