티스토리 뷰

======================================================

안녕하세요 Doridori 입니다.


C# 관련 마지막 내용을 올린지가 9월 달인데 벌써 3달이 지난것 같습니다. 

(물론 "도리도리 하고 싶은거 다해"를 올리고는 있었지만요 ^^;;)


일한다고 정신 못차리고 있다가 이번에 차트 부분을 하고 싶기도 하고 해서 준비하다가 예전에 유튜브에 


화면전환 관련 부분도 알고 싶다고 하신 분이 있으셔서 사전 작업 느낌으로 준비 해 보았습니다. 


이번 회사에서 진행 하는 프로젝트 때문에 계속 바쁠것 같기는 하지만 틈틈히 준비 해 보도록 하겠습니다.


다음 번에 할 내용은 이미 정해 놓은 상태라 이렇게 오래 걸리지는 않지 않을까 합니다. ^^;; (다음은 차트 입니다.~!)


남겨 주시는 글들을 보면서 힘도 내고 마음도 다잡고 있습니다. 


다들 감사 드립니다. m(_._)m


어려운 시기에 다들 화이팅 입니다.

======================================================




50.화면 전환 (Frame Modeling)

 

 

Source UI) Study_50_화면 전환 (Frame Modeling) (UI).zip

Soruce 1차 Source) Study_50_화면 전환 (Frame Modeling).zip

교재) 50. 화면 전환 (Frame Modeling).pdf








일을 하면서 Interface, Chart 관련 부분을 생각하고 있었는데 (C#은 아니지만 제가 요즘 회사에서 Chart를 보고 있습니다. ㅎㅎ) 차트 예제를 만들다가 보니 예전에 댓글로 남겨주신 내용이 생각나서 Frame 전환 하는 부분을 구현해 보았습니다.


그렇게 거창한 부분이 들어가는건 아니고 화면이 간단해서 그리면서 했는데 간단한거 그리는데에도 시간이 많이 들었다는걸 깜빡했습니다. =0=a


하다보니 30분정도가 훌쩍 지나가네요 ^^;;


프로그램을 만들때 뼈대를 만드는 부분이라 한번 처음부터 진행 해 보시면 어떨까 싶어서 화면 그리는것 부터 했습니다. (한번 정도는 만들어 보시면 도움이 될것 같습니다.)




위의 그림이 이해가 가지 않으신다면 영상을 보시면 화면을 그리면서 부분 부분 집어 놓았으니 함께 보시면 좋을 듯 합니다. 


순서대로 event를 보내는 부분 부터 그려놓고 차근차근 구현 했다고 보시면 될 것 같습니다. 



UI)



화면이 많아지면 올리기 힘들어서 보통 단일 화면으로 구성 하는데 이제 다중 화면을 구현 해 볼 때가 아닌가 싶기도 합니다. 


(이런식이면 코드 올리기도 쉽지 않아서 고민이 되기는 하네요 ^^;;)


뭔가 한번 만들면 몇강씩 뽑고 해야 할듯 하기도 하고 그렇네요.




강의)


간만에 그림 그리는 부분 부터 있어서 번거로우 시면 건너 뛰셔도 좋습니다. 


다른 강의 처럼 특정 Class나 기능을 가지고 다루는 내용이 아니기 때문에 그림 다그리고 내용 만드는 부분은 꼭 보셨으면 좋겠습니다. 


프로그램의 동작이나 흐름을 보시면 됩니다. ^^;;






Source)


별거 없는 내용인데 화면 별로 쪼개 놓아서 올릴때 번거롭기는 하네요 


(한 class에 몰아 놓는 프로그램은 거의 없지 싶긴 합니다. ^^;;)


(Main)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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 FrameModeling
{
    public partial class Form1 : Form
    {
        #region 전역 변수
        ucPanel.ucScreen1 ucSc1 = new ucPanel.ucScreen1(); // 화면1 
        ucPanel.ucScreen2 ucSc2 = new ucPanel.ucScreen2(); // 화면2
        ucPanel.ucScreen3 ucSc3 = new ucPanel.ucScreen3(); // 화면3
        #endregion
 
        public Form1()
        {
            InitializeComponent();
        }
 
        #region Form Event
        private void Form1_Load(object sender, EventArgs e)
        {
            ucSc1.eLogSender += UcSc_eLogSender;   // 화면 1 Delegate Event
            ucSc2.eLogSender += UcSc_eLogSender;   // 화면 1 Delegate Event
            ucSc3.eLogSender += UcSc_eLogSender;   // 화면 1 Delegate Event
 
            pMain.Controls.Add(ucSc1);
        }
 
        // Main 화면 Button Click Event (동일 Event로 받고 코드 상에서 분기 처리)
        private void button_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;
 
            switch (btn.Name)
            {
                case "BtnSc1":
                    pMain.Controls.Clear();
                    pMain.Controls.Add(ucSc1);
                    break;
                case "BtnSc2":
                    pMain.Controls.Clear();
                    pMain.Controls.Add(ucSc2);
                    break;
                case "BtnSc3":
                    pMain.Controls.Clear();
                    pMain.Controls.Add(ucSc3);
                    break;
                case "BtnExit":
                    Application.Exit();
                    break;
                default:
                    break;
            }
 
            Log(enLogLevel.Info, $"{btn.Text} 버튼 Click");
        }
        #endregion
 
        #region del Event
        private void UcSc_eLogSender(object oSender, enLogLevel eLevel, string strLog)
        {
            Log(eLevel, $"[{oSender.ToString()}] {strLog}");
        }
        #endregion
 
 
        #region Log OverLoading
        private void Log(enLogLevel eLevel, string LogDesc)
        {
            DateTime dTime = DateTime.Now;
            string LogInfo = $"{dTime:yyyy-MM-dd hh:mm:ss.fff} [{eLevel.ToString()}] {LogDesc}";
            lboxLog.Items.Insert(0, LogInfo);
        }
        private void Log(DateTime dTime, enLogLevel eLevel, string LogDesc)
        {
            string LogInfo = $"{dTime:yyyy-MM-dd hh:mm:ss.fff} [{eLevel.ToString()}] {LogDesc}";
            lboxLog.Items.Insert(0, LogInfo);
        }
        #endregion
 
 
    }
}
 
cs



(Global - 전역)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace FrameModeling
{
    class cGlobal
    {
 
    }
 
    // Log Level을 지정 할 Enum
    public enum enLogLevel
    {
        Info,
        Warning,
        Error,
    }
 
    // UserControl에서 Main으로 Log를 전달 하기 위한 Delegate
    public delegate void delLogSender(object oSender, enLogLevel eLevel, string strLog);
    
}
 
cs



(UserControl 화면1, 2, 3 - 화면 1 기준으로 올림 비슷한 형태로 구성)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace FrameModeling.ucPanel
{
    public partial class ucScreen1 : UserControl
    {
        public event delLogSender eLogSender;
 
        public ucScreen1()
        {
            InitializeComponent();
        }
 
        private void btnSc1_Click(object sender, EventArgs e)
        {
            eLogSender("Screen1 Button", enLogLevel.Info, "Button Click");
        }
    }
}
 
cs




댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함