티스토리 뷰

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

안녕하세요 Doridori 입니다. 


이번 강의는 예외처리 (Exception)에 대한 강의 입니다. 


올해 첫 강의 입니다. 


간단한 내용이지만 알아두면 유용하게 사용되기도 하는 내용입니다. 


예외처리를 잘해두면 프로그램이 몰래 죽는 경우도 쉽게 찾을 수 있고 프로그램이 안정성있게 잘 돌아가면 사용자들도 믿고 사용할수 있는 프로그램이라고 생각하지 않을까 합니다. 


올해도 힘내보시죠~! 


화이팅!!

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


예외처리 (Exception)


Source UI) Study_28_Exception 2 (Sample) (UI).zip

Soruce 전체) (이번에는 동영상 1번에 대한 Source와 2번에 대한 Source가 별도로 있습니다.)

Study_28_Exception 1 (Main).zip

Study_28_Exception 2 (Sample).zip

교재) 28강 예외처리 (Exception).pdf






예외처리의 경우 발생을 하지않게 코딩하는것이 가장 좋겠지만 여러사람이 짜는 프로그램이라면 예외가 발생하지 않을 수 없습니다. 


그래서 유지보수를 한다는 느낌으로 예외처리를 잘 걸어 두시고 예외가 발생 할 때마다 줄여가는것이 좋은 방법 같습니다. ^^


예외처리는 하나만 아시면 됩니다. 


Exception~! 끝~! 




UI)

이번에는 예외처리에 대한 설명에 대한 강의를 하나 진행 하고 끝내려고 하다가 뭔가 밍밍한 느낌이어서 UI예제를 하나 별도로 만들었습니다. 

UI 예제를 하면서 예외처리에 대한 내용과 처리방법에대해서도 넣으려고 노력 했습니다. ^^:; 

예외처리 1강을 Main으로 보시고 이런식으로 적용하면 되겠구나 정도로 봐주시면 좋을 것 같습니다.





강의)


1) Exception의 종류와 사용 방법, 순서에 대해서 설명해 놓았습니다. 

요지는 예외처리 Class의 경우 상속 받은 형태로 구성되어 있으면 먼저 호출하는 예외의 경우 자식 Class의 예외처리를 호출하고 가장 아래 줄에 부모 Class의 예외를 호출 하면 됩니다. 

Exception > SystemException > NullReferenceException, OverflwException, argumentException . . . 

(이것저것 다 귀찮고 예외만 잡아내면 된다 싶으시면 Exception 만 예외로 잡으시면 됩니다.)



2) 색칠하기 예제를 만들어 봤는데 그림을 그려서 색칠하면 좋겠으나 시간 관계상 Panel에 색칠하는 형태로 진행 하였습니다. 

배경의 경우 색상의 Alpha 값 적용을 확인하기 위해 넣었다고 보시면 될것 같습니다. 

중간중간 예외를 처리하는 방법도 넣었으니 참고해서 보시면 좋을것 같습니다. 


Source) 

Exception 1 (Main)Exception 2 (Sample)은 두개가 다른 프로그램 입니다. (혼동하시면 아니되옵니다. ^^;;)


Exception 1 (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
92
93
94
95
96
97
98
99
100
101
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 _28_Exception
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
 
                // FormatException
                int iCheck = 0;
                if (int.TryParse(textBox1.Text, out iCheck))
                {
                    //int.Parse(textBox1.Text);
                }
                else
                {
                    label1.Text = "Data Form이 맞지 않습니다.";
                }
 
 
 
                // ArgumentException
                string strTest = string.Empty;
                List<string> LStringCheck = new List<string>();
 
                LStringCheck.Add("TEST1");
 
                //for (int i = 0; i < 2; i++)
                //{
                //    strTest = LStringCheck[i];
                //}
                foreach (string ostrText in LStringCheck)
                {
                    strTest = ostrText;
                }
               
 
 
                // NullReferenceException
                List<object> LObject = null;
 
                if (LObject != null)
                {
                    object oRet = LObject[0];
                }
 
 
 
                // InvalidCastException
                object oCheck = "fgdfg";
                if (oCheck is int)
                {
                    int iCastCheck = (int)oCheck;
                }
            }
            catch (FormatException ex)
            {
                label1.Text = ex.ToString();
            }
            catch (ArgumentException ex)
            {
                label1.Text = ex.ToString();
            }
            catch (NullReferenceException ex)
            {
                label1.Text = ex.ToString();
            }
            catch (InvalidCastException ex)
            {
                label1.Text = ex.ToString();
            }
            catch (Exception ex)
            {
                label1.Text = ex.ToString();
            }
            
 
            finally
            {
                //label1.Text = "함수를 완료하기 전 실행";
            }
        }
    }
}
 
cs


Exception 2 (Sample)

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
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 _28_Exception_Ex
{
    public partial class Form1 : Form
    {
        Dictionary<string, Color> dColor = new Dictionary<string, Color>();  // 색상정보를 담아 둘 Dictionary
        Color oSelectColor = new Color();   // 현재 선택 된 생상 정보를 가지고 있을 변수
 
        /// <summary>
        /// 프로그램 진입점
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }
 
 
        /// <summary>
        /// ColorDialog Event를 불러올 Panel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void pColor_MouseClick(object sender, MouseEventArgs e)
        {
            DialogResult dRet = cDialogColor.ShowDialog();  // ColorDialog를 불러서 선택한 뒤 결과 값까지 받아 옴
 
            if (dRet == DialogResult.OK)   //결과 값이 정상일 때 선택 된 Color를 Panel에 뿌려줌
            {
                pColor.BackColor = cDialogColor.Color;
            }
 
            lblColorinfo.Text = pColor.BackColor.ToString();
        }
 
 
        /// <summary>
        /// trackbar의 값이 변할때 불러오는 Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tbarAlpha_Scroll(object sender, EventArgs e)
        {
            pColor.BackColor = Color.FromArgb(tbarAlpha.Value, pColor.BackColor);  // 색상 값에 Alpha 값을 변경해서 다시 저장 함
            lblColorinfo.Text = pColor.BackColor.ToString();
        }
 
 
        /// <summary>
        /// 저장 Button을 Click 했을 경우 선택 색상을 사전에 저장 한 뒤 사전에 있는 값을 List에 뿌려 줌
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnColorSave_Click(object sender, EventArgs e)
        {
            try
            {
                Color oColor = pColor.BackColor;
                dColor.Add(oColor.ToString(), oColor);
 
                LBoxRefresh();
            }
            catch (ArgumentException ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
 
        /// <summary>
        /// 삭제 Button을 Click 했을 경우 List에서 선택된 값과 같은 key를 가진 사전에 있는 값을 삭제 한뒤 List를 다시 뿌려 줌
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnColorDelete_Click(object sender, EventArgs e)
        {
            try
            {
                // 사전에 있는 색상을 삭제하고 
 
                if (lboxColor.SelectedItem != null && dColor.ContainsKey(lboxColor.SelectedItem.ToString()))
                {
                    dColor.Remove(lboxColor.SelectedItem.ToString());
                }
                else
                {
                    MessageBox.Show("삭제할 Item이 없거나 사전에 키가 없습니다.");
                }
                
                // List를 다시 화면에 뿌려준다
                LBoxRefresh();
            }
            catch (NullReferenceException ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
 
 
        /// <summary>
        /// 사전에 있는 값으로 ListBox를 새로 그려 줌
        /// </summary>
        private void LBoxRefresh()
        {
            try
            {
                lboxColor.Items.Clear();
 
                foreach (string okey in dColor.Keys)
                {
                    lboxColor.Items.Add(okey);
 
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
 
       
        /// <summary>
        /// ListBox의 선택 값이 변경 되면 변경 된 선택 값의 색상 정보를 oSelectColor 변수에 저장 함
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lboxColor_SelectedIndexChanged(object sender, EventArgs e)
        {
            oSelectColor = dColor[lboxColor.SelectedItem.ToString()];
        }
        
        /// <summary>
        /// 그림 판에 있는 Panel 중 선택 된 Panel에 대해서 저장한 색상 정보를 기준으로 다시 그려 줌
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Panel_Click(object sender, MouseEventArgs e)
        {
            try
            {
                //TextBox oTbox = sender as TextBox;
                //TextBox oTbox = (TextBox)sender;
 
                if (sender is Panel)
                {
                    Panel oPanel = sender as Panel;
                    oPanel.BackColor = oSelectColor;
                }
                else if(sender is Button)
                {
                     
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}
 
cs


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함