경험을 통해서

[TOY PROJECT] TO DO LIST 내 할 일 리스트 만들기(서버, 앱, 응용어플리케이션) 본문

Coding Diary

[TOY PROJECT] TO DO LIST 내 할 일 리스트 만들기(서버, 앱, 응용어플리케이션)

할일이 많다 2025. 1. 11. 23:37

오늘은 내가 가장 그나마 잘할 수 있는 컴퓨터 어플리케이션부터 만들어보자

(파이썬 서버 구성은 추후에 계속 글을 쓰면서 업데이트 하지만 일단 만들어진 상태에서 구상을 한다)

DB를 직접 들어가지 않고

API 서버를 구축 후 진행한다는 전재 하에 진행

Json 기본 구성도 되어 있다는 전제....(파이썬 편을 기대해 주세요`~)

 

 

이제 다시 C#으로~~

 

일단 UI 구성은 다음과 같다

 

요즘 빠진 디자인 스타일이 심플한게 제일 좋아서 이렇게 만들어봄~

 

그럼 IDE로 가서 만들어보자~

 

일단 UI만 구성해놓고 로직을 구성 해보자~

 

아래처럼 플로우 차트를 만들어봄 (그냥 진짜 어떻게 구성할 지 만든 차트임)

 

 

웬만한 응용 프로그래머들은 솔직히 이정도는 로직 크게 구상 안해도 코딩 가능 할 거라 생각하지만

하나씩 설명하면서 가보자

 

 

1. 동적 User Control 생성

처음에는 일반 판넬에 라벨을 Top Dock으로 하려고 했는데

그러면 너무 코드가 길어질 거 같아서 그냥 User Control을 사용하려고 한다

(진심 Panel에 넣을 수도 있어서 이용 방법이 편함

 

2. 스크롤바 추가

분명 안 해놓고 싸놓아질 게 많기 때문에 내릴 수 있게 스크롤 바 추가 필요

이건 솔직히 쉽기 때문에 속성 창만 스샷 넣어 놓도록 하겠다~

Auto Scroll 부분만 True로 변경하고 동적으로 객체 생성 할 때 Dock 값만 Top으로 변경 해주면 된다

 

 

그럼 이렇게 됨

 

 

디자인은... 자신이 없어서... 이거 밖에 못함...

 

코드를 일부 올려서 좀 설명 좀 해볼까 한다.

 

 

1. 업데이트 부분 코드

판넬 내부에 생성이 되어있던 모든 Control들을  Dispose  후에

다시 생성

(솔직히 이 부분은 2가지 방법이 있다.

1. API에서 받은 값을 재 정렬 해서 있는건 넘어가고 없는 건 추가한다.

2. API에서 받은 값을 가지고 기존에 생성 되어 있는 값들은 다 제거 후 지금처럼 다시 받은 값을 재생성

 

근데 2번을 선택하는 이유는 프로그램 자체가 무겁지도 않고 그리고 할 일에 대해서 시간 순으로 정렬 되는 것을 원하기 때문에 다 지우고 들어온 값을 전부 다시 생성하는 쪽을 선택)

  private async void refreshList()
  {

      _Memos = await _apiHelper.CallApiAsync<MemoList>(APICommand.INGLIST);
      if (_Memos == null)
      {                
          LOADING.Show();
          timVanish.Start();
      }
      else
      {
          resetList();
      }
      
  }

 

_Memos가 List여서 들어온 값을 전부 JsonArray로 Convert 후 진행

       private void resetList()
       {
           int sCnt = panel1.Controls.Count;
           if (sCnt > 0)
           {
               for (int sLoop = 0; sLoop < sCnt; sLoop++)
               {
                   panel1.Controls[0].Dispose();
               }
           }

           foreach (var memo in _Memos)
           {
               ucList ucTemp = new ucList();
               ucTemp.TODODATE = $"{memo._date}{memo._time}";
               ucTemp.TODOTITLE = $"{memo._title}";
               ucTemp.TODODONE = memo._flag.Equals("Y");
               ucTemp.TODOIMPORT = memo._importance;
               ucTemp.Dock = DockStyle.Top;
               panel1.Controls.Add(ucTemp);
               //panel1.Controls.Add(ucTemp, 0, _Cnt++);
               //tlPanSub.RowStyles.Add(new RowStyle(SizeType.Absolute, 120F));
           }
       }

 

 

2. USER CONTROL 생성 및 PANEL에 추가


프로퍼티에 값을 넣을 때 해당 값을 컴포넌트에 넣고 싶으면 선언 해주면 굳이 다른 이벤트 핸들러 필요 없이 사용 가능해서 편할 때가 있다(개인적인 스타일임)

그리고 굳이 별 다른 함수나 프로시저를 별도로 생성할 필요가 없어서 편하다

 

 

    #region Properties

    public string TODOTITLE
    {
        get {return lblTitle.Text; }
        set { lblTitle.Text = value; }
    }

    public string TODODATE
    {
        get { return lblDate.Text; }
        set { lblDate.Text = value; }
    }
    public bool TODODONE
    {
        set { checkBox1.Checked = value; }
    }

    public int TODOIMPORT
    {
        set
        {
            for (int sLoop = 0; sLoop < value; sLoop++)
            {
                _pbImportance[sLoop].Image = Properties.Resources.starimportance;
            }
        }
    }

    #endregion

 

 

1부 컴퓨터 응용 프로그램은 여까지~

 

 

 

 

이제 서버를 구축하러 가보자~~~

(참고로 리눅스 임)

 

 

 

'Coding Diary' 카테고리의 다른 글

EFECS-2  (0) 2022.03.06