티스토리 뷰

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

안녕하세요 Doridori 입니다. 


이번 강의는 UserControl(사용자 정의 컨트롤)에 대한 강의 입니다. 


UserContrl의 경우 프로그램의 규모가 커지면 필수가 되는 부분이라고 할 수있습니다. 


물론 devexpress 같은 UI Component 사용 한다면 필요 없을 수도 있지만 돈을 주고 구입해야 하기 때문에 사용하지 않는 경우도 많습니다. 


저희는 배우는 단계이니 굳이 저런거 필요 없습니다. 흥칫뿡!


꼭 익숙해져서 자주 사용하시면 좋습니다.~! 

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


UserControl (사용자 정의 컨트롤)


Source UI) Study_29_UserControl (UI).zip

Soruce 전체) Study_29_UserControl.zip

교재) 29강 UserControl (사용자 정의 컨트롤).pdf







사용자 정의 컨트롤이란 말 그대로 사용자가 기본적으로 제공하는 Control 외 별도로 사용자가 원하는대로 Control을 제작해서 사용하는 내용 입니다. 


간단하게 내가 글자를 입력하면 자동으로 색상이 변하는 Label을 사용하고 싶어~! 라고 할때 기존 Label에 Text Change Event에 Lable 색상 변경을 추가하면 되겠지만 이런 Label을 곳곳에 많이 추가해야 하는 경우라면 작업량이 무척이나 많아지게 됩니다. 


이럴경우 색상이 변하는 Label을 만들어서 등록해서 사용하게 되면 그냥 가져다 쓰기만 하면 되기때문에 매우 편리해 집니다. 


이게 UserControl에 대한 설명의 전부 입니다. ^^;; (참 쉽죠~!)





UI) 


예전에 만들었던 학생 기록부 관리하는것 같은 걸 만들까도 했는데 너무 똑같아 지니까 색다르게 현상금 계시판을 만들어 보았습니다. 


보통 UserControl에 대한 내용을 하게 되면 Label + Button 정도 하고 끝내는데 (많으면 속성까지 추가해보기도 합니다.)


이유는 Winform 강의를 할때 보통은 앞쪽에서 강의를 많이 하게 됩니다. 


하지만 저는 아껴놓고 아껴놓았다가 뒤에 진행하였기 때문에 우리가 배웠던 Delegate를 추가해서 Event 까지 추가해 보도록 하겠습니다. (와~! O,O//)





강의)


UserControl의 경우 어려운 내용이 없기때문에 차근차근 한번 따라해 보시고 원하는 Control을 한번 만들어 보시면 바로이해가 될것 같습니다. 




Source)


UserControl 부분과 Main 부분이 있는데 보시면 Main에는 Source가 거의 없는 것을 알 수 있습니다.


소스를 모듈화 시키는데에도 아주 좋다고 볼 수 있습니다. ^^


UCInfo (UserControl)


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
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 _29_UserControl
{
    public partial class UCInfo : UserControl
    {
        // Control의 부모 쪽으로 전달할 Event Delegate 
        public delegate int delEvent(object Sender, string strText);   // delegate 선언
        public event delEvent eventdelSender; // delegate event 선언
 
 
        // Control의 속성값을 정의
        [Category("UserProperty"), Description("Image")]
        public Image UserFace
        {
            get
            {
                return this.pboxFace.BackgroundImage;
            }
            set
            {
                this.pboxFace.BackgroundImage = value;
            }
        }
 
        [Category("UserProperty"), Description("No")]
        public string UserNo
        {
            get
            {
                return this.lblNo.Text;
            }
            set
            {
                this.lblNo.Text = value;
            }
        }
 
        [Category("UserProperty"), Description("현상범의 이름")]
        public string UserName
        {
            get
            {
                return this.lblName.Text;
            }
            set
            {
                this.lblName.Text = value;
            }
        }
 
        [Category("UserProperty"), Description("현상범의 금액")]
        public string UserGold
        {
            get
            {
                return this.lblGold.Text;
            }
            set
            {
                this.lblGold.Text = value;
            }
        }
 
 
        /// <summary>
        /// UserControl 진입점
        /// </summary>
        public UCInfo()
        {
            InitializeComponent();
        }
 
 
        /// <summary>
        /// UserControl Button Event를 한곳으로 모아 놓은 부분
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Click(object sender, EventArgs e)
        {
            string strText = string.Empty;
 
            Button oBtn = sender as Button;  // object 형태로 되어 있는 sender를 Button 형태로 형변환
 
            switch (oBtn.Name)
            {
                case "btnReg":
                    this.BackColor = Color.Red;
                    strText = string.Format("{0}은 금액 {1}으로 수배중 입니다.", lblName.Text, lblGold.Text);
                    break;
                case "btnIdle":
                    this.BackColor = Color.Yellow;
                    strText = string.Format("{0}은 수배 중지  상태 입니다.", lblName.Text);
                    break;
                case "btnCatch":
                    this.BackColor = Color.Green;
                    strText = string.Format("{0}은 잡혔습니다.", lblName.Text);
                    break;
                default:
                    break;
            }
 
            if (eventdelSender != null)  // 부모가 Event를 생성하지 않았을 수 있으므로 생성 했을 경우에만 Delegate를 호출
            {
                eventdelSender(this, strText);
            }
        }
    }
}
 
cs



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
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 _29_UserControl
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// Program 진입점
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// Program을 Load 했을 경우에 발생 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            // pMain Control 안에서 생성한 UserControl을 찾아서 형변환 한 뒤 Event를 생성 함
            foreach (var oControl in pMain.Controls)
            {
                if (oControl is UCInfo)
                {
                    UCInfo oInfo = oControl as UCInfo;
 
                    oInfo.eventdelSender += OInfo_eventdelSender;
                }
            }
        }
 
 
        /// <summary>
        /// UserControl Delegate Event 
        /// </summary>
        /// <param name="Sender"></param>
        /// <param name="strText"></param>
        /// <returns></returns>
        private int OInfo_eventdelSender(object Sender, string strText)
        {
            UCInfo oInfo = Sender as UCInfo;
 
            lboxList.Items.Add(string.Format("{0}) {1}", oInfo.UserNo, strText));
 
            return 0;
        }
    }
}
 
cs


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