반응형
Modal 창 효과 내기
Windows Form Modal
Visual C#
기본적으로 Form 을 modal 창으로 띄우려면 Form.ShowDialog() 를 하면 됩니다.
여기에 웹에서 보면 모달창이 떠있는 동안 뒷 배경이 회색 반투명하게 보이죠? 대부분.
모서리도 둥글게 라운드되어있고요.
그걸 Windows Form 에서 해보겠습니다.
요약
1. 호출하는 Form ( 아무거나 만들어서 버튼클릭 이벤트를 하나 추가합니다. )
2. 뒷배경을 반투명하게 할 form ( 재사용 )
3. Custom Dialog Form ( Yes , No 버튼등을 만들어서 물어보는 창 )
일단 Form 을 추가합니다.
이름은 FormModalBack 이라고 하겠습니다.
그리고 아래와 같이 속성을 변경해 줍니다.
FormBorderStyle : None
Opacity : 50%
BackColor : Black
그리고 Event 속성에서 Paint 를 추가합니다.
소스는 아래와 같습니다.
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 | using System; using System.Windows.Forms; namespace HelloWorldTest { public partial class FormModalBack : Form { [System.Runtime.InteropServices.DllImport("Gdi32.dll", EntryPoint = "CreateRoundRectRgn")] private static extern System.IntPtr CreateRoundRectRgn(int nLeftRect, int nTopRect , int nRightRect, int nBottomRect, int nWidthEllipse, int nHeightEllipse); [System.Runtime.InteropServices.DllImport("gdi32.dll", EntryPoint = "DeleteObject")] private static extern bool DeleteObject(System.IntPtr hObject); public FormModalBack() { InitializeComponent(); } private void FormModalBack_Load(object sender, EventArgs e) { } private void FormModalBack_Paint(object sender, PaintEventArgs e) { System.IntPtr ptr = CreateRoundRectRgn(0, 0, this.Width, this.Height, 10, 10); this.Region = System.Drawing.Region.FromHrgn(ptr); DeleteObject(ptr); } } } |
(load 이벤트는 없어도 됩니다)
그리고 또 Form 을 추가해서 FormCustomDialog 로 만듭니다.
상황에 따라 Message 와 버튼 text 를 받아서 보여주고 Click 했을 때 this.DialogResult 에 값을 설정해 주면됩니다.
FormCustomDialog.cs 코드는 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | using System; using System.Windows.Forms; namespace HelloWorldTest { public partial class FormCustomDialog : Form { public FormCustomDialog() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; } private void button2_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; } } } | cs |
this.DialogResult = DialogResult.Ok; 를 하면 Form 이 종료됩니다. 굳이 this.close() 를 안해도됩니다.
이제 테스트를 해보겠습니다.
아무 Form 에서 버튼을 만들고 클릭 이벤트에 아래와 같이 소스를 입력합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | private void button1_Click(object sender, EventArgs e) { FormModalBack fm = new FormModalBack(); // 뒷배경 반투명처리할 폼 fm.Size = this.Size; fm.BringToFront(); fm.Show(); fm.Location = this.Location; // 반드시. .Show() 다음에. if (new FormCustomDialog().ShowDialog() == DialogResult.OK) { // 원래 띄울 모달창. // do something... } fm.Close(); } | cs |
프로그램을 실행합니다
버튼을 클릭하면 아래와 같이 뒷배경이 반투명하게 됩니다.
728x90
반응형
'C# Windows Form 개발 따라하기' 카테고리의 다른 글
[006] Dictionary 사용법. 기본,응용 (0) | 2019.01.19 |
---|---|
[005] CheckBox, RadioButton (Windows Form C#) (0) | 2019.01.18 |
[004] ComboBox . Windows Form 에서 ComboBox 사용하기 (Dropdown, selectbox) (0) | 2019.01.18 |
[003] 모든 개발의 시작. hello world ! (0) | 2019.01.17 |
[002] Visual Studio 테마 변경 방법 (0) | 2019.01.16 |
댓글