컴퓨터 언어/C#

[VSCODE C# , Windows forms C#] C# UserControl 모듈화 방법 및 소개

훈츠 2020. 3. 7. 17:22
반응형

VSCODE C# 을 활용해서, Windows Forms UserControl 모듈화 하는 방법에 대해 알아보도록 하겠습니다. 

 

  • 새로운 Windows form 만들고 띄우기 
  • 사용자 정의 컨트롤 (Windows Forms) 만들기 
  • Main Form에서 사용자 정의 컨트롤 활용 하기 

 


새로운 Window Form 만들고 띄우기 

프로젝트 -> 구성요소 추가 -> Windows Forms -> 양식(WindowsForms) 선택 합니다. 

 

Show , ShowDialog, Close 명령어로 form을 제어하세요.

Form3 form3 = new Form3();
//show or showDialog 둘중에 하나 사용하시면 됩니다. 
form3.Show(); 
form3.ShowDialog();

//띄운 form을 닫을때는 close문을 사용하시면 됩니다. 
form3.Close;

사용자 정의 컨트롤 (Windows Forms) 만들기 

프로젝트 -> 구성요소 추가 -> Windows Forms -> 사용자 정의 콘트롤(WindowsForms) 선택 합니다. 

사용자 정의 콘트롤 디자인 화면 구성

다음과 같이 모듈화합니다.

사용자 정의 Propertise 구성 

lable NAME 구성 합니다.

 

프로퍼티 구성 

namespace ConsoleApp2
{
    public partial class UCinfo : UserControl
    {
        [Category("UserProperty"), Description("MainSubject")] //Description은 코멘트입니다.
        public string UserSubjectName //return type에 무엇을 돌려줄지 결정합니다. 
        {
            get {
                return this.lbMainSubject.Text; //main subject text값을 가져옵니다. 
            }
            set {
                this.lbMainSubject.Text = value; //main subject text값을 set합니다.
            }
        }
        public UCinfo()
        {
            InitializeComponent();
        }
    }
}

 

 

델리게이트 추가로 외부에서 이벤트 입력 혹은 가져가기(Ddelegate 추가)

  • public delegate int delEvent(object sender, string strText); //delegate 선언 
  • public event delEvent eventdelSender; //delegate event 선언 
  • 해당 하는 comboBox 에 event 값 전달해 주기 


코드 뷰

namespace User_InfoTest
{
    public partial class UCinfo : UserControl
    {
        //main Subject 속성값 구성
        [Category("UserProperty"), Description("MainSubject")]
        public string UserSubjectName
        {
            get{
                return this.lbMainSubject.Text;
            }
            set{
                this.lbMainSubject.Text = value;
            }
        }

        public delegate int delEvent(object sender, string str);//delegate 선언 
        public event delEvent eventdelSender; //delegate event 선언 

        //초기화
        public UCinfo()
        {
            InitializeComponent();
        }
        private void combo(object sender, EventArgs e)
        {
            string str = string.Empty;
            ComboBox comb = sender as ComboBox;
            switch (comb.Name)
            {
                case "comboCPUselect":
                    str = comboCPUselect.SelectedItem.ToString();
                    break;
                case "comboDIselect0":
                    str = comboDIselect0.SelectedItem.ToString();
                    break;
                default:
                    break;
            }

            if (eventdelSender != null)
            {
                eventdelSender(this, str);
            }

        }

 


폼에서 개별로 로드 

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            ucinfo1.eventdelSender += Ucinfo1_eventdelSender; //tab 키눌러야함.
            ucinfo2.eventdelSender += Ucinfo2_eventdelSender; //tab키 누르면 하단 자동 생성  
        }
		private int Ucinfo1_eventdelSender(object sender, string strText)
        {
            listBox1.Items.Add(string.Format("{0}) {1}", ucinfo1.Name, strText));
            return 0;
        }
        private int Ucinfo2_eventdelSender(object sender, string strText)
        {
            listBox1.Items.Add(string.Format("{0}) {1}", ucinfo2.Name, strText));
            return 0;
        }

        
        

 


 

폼에서 Panel 을 이용하여 손쉽게 로드 

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (var oControl in panel1.Controls) //panel1 은 panel 의 아이디입니다. 
            {
                if (oControl is UCinfo)
                {
                    UCinfo oInfo = oControl as UCinfo;
                    oInfo.eventdelSender += OInfo_eventdelSender; //tab누르면 하단 생성     
                }
            }
        }

        private int OInfo_eventdelSender(object sender, string str)
        {
            UCinfo oInfo = sender as UCinfo;
            listBox1.Items.Add(str);
            return 0;
        }

    
    }

 

반응형

'컴퓨터 언어 > C#' 카테고리의 다른 글

[C#] C# 컬렉션 함수 Dictionary  (0) 2020.03.03
[C#] C# 컬렉션 함수 List  (0) 2020.02.20