C# - Windows应用程序 - 保存列表

时间:2017-03-14 07:22:35

标签: c# windows-forms-designer

Task List

我制作了一个简单的TO-DOs程序,它从文本框中获取输入,然后将其放在另一个文本框中。旁边有勾选框, 这一切都很好,除了我无法保存列表,例如。该项目是否已完成。 请任何人帮我保存这个项目清单。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TO_DOs
{
    public partial class Form1 : Form
    {
        private bool text1, text2, text3, text4, text5, text6, text7, text8;

        public Form1()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (text1 == false)
            {
                textBox2.Text = textBox1.Text;
            }
            else if (text2 == false)
            {
                textBox3.Text = textBox1.Text;
            }
            else if (text3 == false)
            {
                textBox4.Text = textBox1.Text;
            }
            else if (text4 == false)
            {
                textBox5.Text = textBox1.Text;
            }
            else if (text5 == false)
            {
                textBox6.Text = textBox1.Text;
            }
            else if (text6 == false)
            {
                textBox7.Text = textBox1.Text;
            }
            else if (text7 == false)
            {
                textBox8.Text = textBox1.Text;
            }
            else if (text8 == false)
            {
                textBox9.Text = textBox1.Text;
            }


        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            text1 = true;

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            text2 = true;
        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {
            text3 = true;
        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {
            text4 = true;
        }

        private void textBox6_TextChanged(object sender, EventArgs e)
        {
            text5 = true;
        }

        private void textBox7_TextChanged(object sender, EventArgs e)
        {
            text6 = true;

        }

        private void textBox8_TextChanged(object sender, EventArgs e)
        {
            text7 = true;
        }

        private void textBox9_TextChanged(object sender, EventArgs e)
        {
            text8 = true;
        }
    }
}

5 个答案:

答案 0 :(得分:1)

我会这样做:

创建一个类来存储您的值:

public class ListEntry
{
    public string Text { get; set; }

    public bool Finished { get; set; }
}

然后我会创建2个方法:

public List<ListEntry> UI_To_List(); //Create UI from your saved file

public void List_To_UI(List<ListEntry> entries); //Process your UI 
  

现在您可以选择如何存储列表。

您可以将其存储为JSONXML

一些建议:

  1. 我会为TextBox + CheckBox创建一个UserControl
  2. 显示用户控件列表&#39;在FlowLayoutPanel
  3. =&GT;然后你可以处理FlowLayoutPanel.Controls List。
  4. 这会使您的列表动态调整大小为“无限制”&#39;物品数量。
  5. 简短示例:

    1. 创建一个UserControl(右键单击该项目): enter image description here
    2. 将这两种方法添加到UserControl的代码中(F7 / rightclick =&gt;查看代码):

      public void SetText(string text)
      {
          //Set the Text of your TextBox in the UserControl:
          textBox1.Text = text;
      }
      
      public void SetFinished(bool finished)
      {
          //Set the Checked of your CheckBox in the UserControl:
          checkBox1.Checked = finished;
      }
      
    3. 在您的MainForm中添加FlowLayoutPanel(来自ToolBox)。

    4. 像这样添加你的数据(使用上面的类):

      /// <summary>
      /// 
      /// </summary>
      /// <param name="entries">You will get them from loading your previously saved file</param>
      public void CreateUI(List<ListEntry> entries)
      {
          foreach (ListEntry entry in entries)
          {
              //Create new instance of your UserControl
              TaskView view = new TaskView();
              view.SetFinished(entry.IsFinished);
              view.SetText(entry.Text);
      
              //Add that to your UI:
              this.flowLayoutPanel1.Controls.Add(view);
          }
      }
      
    5. 结果如下:

      enter image description here

答案 1 :(得分:0)

我不确定你想要保存在列表中究竟是什么......但这只是在检查条件时的提示,而不是使用if (text1 == false),只需执行if (!text1)表示“不是真的”,因为默认情况下if (text1)将返回true。

private void button1_Click(object sender, EventArgs e)
{
    if (!text1)
    {
        textBox2.Text = textBox1.Text;
    }
    else if (!text2)
    {
       textBox3.Text = textBox1.Text;
    }

   // Left out the rest of the else ifs
}

答案 2 :(得分:0)

您投射的文本框错误。例如,当您更改textBox4时,您将text3设为true。

TextBox4.Text = TextBox1.Text;

然后你施展

if(text(boolNum))

 TextBox1.Text = TextBox(Number).Text;

它将TextBox4.Text更改为TextBox1.Text。

您可能希望在TextBox1.Text中保存TextBox4.Text,这样您就可以更改所有if块。因此,您必须为更改的textBox符号仅提供一个“true”函数,并在块

时更改
{{1}}

只需交换它们就可以尝试。

如果你想以另一种方式保存另一件事。你必须更加特殊。

答案 3 :(得分:0)

您可以使用CheckedListbox来保存所有操作。 然后,您可以勾选项目,例如在“确定”按钮中包含保存操作:

 foreach(var item in MyCheckedListbox.CheckedItems)
    {
    Console,WriteLine(item.Text);
    }

答案 4 :(得分:0)

让我们看看Felix D的答案。他告诉你如何创建一个类并将项目保存到其中。但是现在只要您的软件正在运行,您就只有一个可用的列表。您仍需要将其保存在桌面上的某个位置。

幸运的是,你有一个非常简单的模式。 string; boolean

那么你如何简单地做到这一点呢?只需创建一个文本文件并编写条目,例如在标有;的csv中的每个信息?

示例:

class Program
{
 public class tmpClass
    {
        public string Text;
        public bool tick;
    }

    public List<tmpClass> tmpList = new List<tmpClass>();

    static void Main(string[] args)
    {
           //Stuff         
    }

    public void WriteToFile()
    {
        string tmpTextFilePath = @"C:\User\Desktop\SaveText.txt";

        using (StreamWriter tmpWriter = new StreamWriter(tmpTextFilePath))
        {
            string tmpTextToWrite = String.Empty;
            for (int i = 0; i < tmpList.Count; i++)
            {
                tmpClass tmpEntry = tmpList[i];
                tmpTextToWrite += tmpEntry.Text + ";" + tmpEntry.tick;
            }
            tmpWriter.WriteLine(tmpTextToWrite);
        }
        //Now we wrote a text file to you desktop with all Informations
    }

    public void ReadFromFile()
    {
        string tmpTextFilePath = @"C:\User\Desktop\SaveText.txt";
        using (StreamReader tmpReader = new StreamReader(tmpTextFilePath))
        {
            string tmpText = tmpReader.ReadLine();
            string tmpInput = String.Empty;
            tmpClass tmpClass = new tmpClass();
            int i = 0;
            foreach (char item in tmpText)
            {
                if(item.Equals(";".ToCharArray()))
                {
                    if (i == 0)
                    {
                        tmpClass.Text = tmpInput;
                        i = 1;
                        tmpInput = String.Empty;
                    }
                    else
                    {
                        if (tmpInput == "True")
                            tmpClass.tick = true;
                        else
                            tmpClass.tick = false;
                        i = 0;
                        tmpInput = String.Empty;
                        tmpList.Add(tmpClass);
                    }
                }
                tmpInput += item;
            }
        }
    }
 }

这应该只是将一个txt文件写入您的桌面并附上您的信息并阅读一个并将其保存到您的列表中。