2017-03-14 1 views
1

Task List의 C# - Windows 응용 프로그램 - 저장 목록 그때 다른 텍스트 상자에 배치 텍스트 상자에서 입력을 취득하는 간단한 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; 
     } 
    } 
} 
+0

어디에서 목록을 저장 하시겠습니까? 그리고 어느 목록에? 나는 아무 것도 볼 수 없다 –

+0

배열, 목록, 콜렉션 등을 사용하는 법을 배우고 자 할 때, 코드를 기반으로 아이템을 저장하기위한 변수가 없기 때문에 거기에서부터 시작할 수 있습니다. –

+0

내가 프로그램을 실행할 때 항목을 물어볼 것이고 나는 그것을 틱 할 수있다. 그리고 모두 잘 작동하지만 프로그램을 닫고 다시 열면 다시 입력을 요청할 것이다. 그래서 나는 프로그램을 마치면 내가 한 것을 구할 수 있기를 원한다. 예. 파일에 저장 어딘가 : {1} 쇼핑 - 사실. 그렇다면이 프로그램은 마침표로 쇼핑을하면서 다시로드 할 수 있음을 의미합니다.감사합니다. – Bilbo

답변

1

내가 이런 식으로 할 것 :

이에 값을 저장하는 클래스를 만듭니다 그런 다음 OK 버튼에 인스턴스에 대한 itemsand을 체크 할 수 당신은 저장 조치를 포함

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

    public bool Finished { get; set; } 
} 

그럼이 방법을 만들 것입니다 :

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

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

이제 목록을 저장하는 방법을 선택하십시오.

당신은 JSON 또는 XML로 저장할 수 있습니다.

몇 가지 권고 사항 : 나는 FlowLayoutPanel

  • => 다음 처리 할 수있는 FlowLayoutPanel에
  • 을 표시 '된 UserControls 목록을'당신의 텍스트 상자에 대한 UserControl을을 만들 + CheckBox의 것

    1. 컨트롤 목록.
    2. 이렇게하면 목록이 동적으로 '무제한'항목 크기가됩니다.

    짧은 예 :

    1. UserControl이 (그것에 대해 마우스 오른쪽 단추로 프로젝트) 만들기 : enter image description here
    2. 당신의 UserControl의 코드에이 두 방법을 추가하기 (F7/오른쪽 클릭하면 => 코드보기) :

      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을 추가하십시오.

    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); 
          } 
      } 
      

    결과는 다음과 같이 표시됩니다

    enter image description here

  • +0

    미안하지만 나는 C#에 대해 아주 새롭고 어떻게 해야할지 모르겠다 .Pls는 이것을 어떻게해야하는지 정확하게 설명 할 수있다. 정말 고마워! – Bilbo

    +0

    어떻게 사용자 컨트롤을 만드나요? – Bilbo

    +0

    예를 알아 보겠습니다. Usercontrol은 프로젝트를 오른쪽 클릭하여 만들 수 있습니다 => Add => UserControl –

    0

    내가 당신이 목록에서 저장할 것입니다 ...하지만 여기에 대신 if (text1 == false)를 사용하는 조건을 검사 할 때 단지 끝 정확히 모르겠어요이 "되지 않음을 의미로, 단순히 if (!text1) 할 true "를 반환합니다. 기본값은 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 
    } 
    
    +0

    고맙습니다 만, 이것을 바꿀 것입니다. 그러나 어쨌든 모든 입력 내용을 저장하고 날씨에 딱지를 찍었습니까? – Bilbo

    +0

    틱 표시된 _textboxes_ 목록을 저장 하시겠습니까? –

    +0

    모든 '텍스트 상자'가'textBox1'에서 텍스트를 가져올 때마다 저장하려는 _input_을 잘 모르겠습니다. –

    0

    틀린 텍스트 상자를 캐스팅하고 있습니다. 예를 들어 textBox4를 변경하면 text3이 true가됩니다.

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

    은 그럼 당신은
    TextBox4.Text = TextBox1.Text; 
    

    그것은 TextBox1.Text에 TextBox4.Text을 변경

    을 캐스팅.

    여기 TextBox1.Text에 TextBox4.Text를 저장하면 모든 블록이 변경 될 수 있습니다. 따라서 변경된 텍스트 상자 기호에 대해 하나의 "참"기능 만 제공하면됩니다.

    if(text(boolNum)) 
    
    TextBox1.Text = TextBox(Number).Text; 
    

    그냥 바꾸어서 시도해보십시오.

    다른 방법으로 다른 것을 저장하려면. 당신은 더 spesific해야합니다.

    +0

    텍스트 상자 1은 입력 상자입니다. 2 - 9는 상자 뒤에 있습니다. 따라서 텍스트 상자 하나가 chnaged인지 알 필요가 없으므로 텍스트 상자 2로 곧바로 이동합니다. – Bilbo

    +0

    이제 문제를 이해합니다. 컨트롤의 상태를 저장하려고합니다. 나는 쉬운 방법이 있는지 모르지만 텍스트 파일을 사용하여 컨트롤의 상태를 저장할 수 있습니다. 그런 식으로 해결하고 싶다면 내 대답을 편집하고이를 수행하는 방법 또는 적어도이 논리를 말할 수 있습니다. – ReadyFreddy

    +0

    예 그게 무슨 뜻이야 그래서 그 textbox2 Task1 작성된 가지고 저장해야합니다 그리고 그것은 쳤다. 고마워요 – Bilbo

    0

    CheckedListbox를 사용하여 모든 tot 작업을 보유 할 수 있습니다.

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

    펠릭스 D에서 답을 볼 수 있습니다 그는 당신에게 정확히 어떻게 수업을 만들고 그것에 항목을 저장하는지 알려줍니다. 그러나 이제는 소프트웨어가 실행되는 동안 사용할 수있는 목록 만 있습니다. 데스크톱의 어딘가에 저장해야합니다.

    운 좋은 당신은 정말 간단한 패턴을가집니다. ; 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 파일을 작성하고 하나를 읽고 목록에 저장해야합니다.

    +0

    txt에 저장하는 것은 좋은 방법이 아닙니다! 모든 문자열 작업 또한 상당히 비효율적입니다. 내 anser json 또는 xml에서 제공 한 것처럼 여기에 갈 수있는 가장 좋은 방법입니다. 또한 영업 인은 learing을 극대화하기 위해 약간의 자체 조사를해야합니다. 복사하여 붙여 넣기 만하면 오랫동안 도움이되지 않습니다. –

    관련 문제