반응형
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 구성
프로퍼티 구성
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 |