티스토리 뷰
WinForm을 하다보면 일반적인 Dialog가 아니라, Overlay 형태의 Dialog가 필요한 상황이 생긴다.
MainForm에 팝업창이 하나 뜨는 Dialog가 아닌, MainForm과 Dialog 사이에 불투명한 레이어가 생기고, 그 위에 Dialog를 올리는 방식이다.
아래 스크린샷 처럼 실제 적용된 모습을 보면 이해가 쉬울것이다.
해당 기능은 아래와 같은 방식으로 구현된다.
1. 불투명 배경으로 사용될 OverlayForm 추가
2. OverlayForm 위에 올라올 Dialog 추가
3. MainForm에서 OverlayForm을 띄우고, OverlayForm에서 Dialog를 띄움
4. Dialog의 DialogResult를 OverlayForm에서 받고, MainForm에 전달
구현 코드는 아래와 같다.
1. OverlayForm
public partial class OverlayDialog : Form
{
private OverlayDialog(Form parent, double opacity)
{
FormBorderStyle = FormBorderStyle.None;
// 불투명 색상
BackColor = Color.Black;
// 불투명 정도, 0에 가까울수록 투명
Opacity = opacity;
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.Manual;
Size = parent.ClientSize;
Location = parent.PointToScreen(Point.Empty);
}
public static DialogResult ShowDialog(Form parent, Form dialog, double opacity = 0.65)
{
var background = new OverlayDialog(parent, opacity);
background.MdiParent = parent.MdiParent;
background.Show();
dialog.StartPosition = FormStartPosition.CenterParent;
DialogResult result = dialog.ShowDialog(background);
background.Close();
return result;
}
}
2. MainForm 에서의 호출
using (var dialog = new LoginDialog())
{
// this : Overlay밑에 깔릴 Form (MainForm)
// dialog : Overlay위에 올라갈 Dialog
if (OverlayDialog.ShowDialog(this, dialog) != DialogResult.OK) return;
var user = dialog.LoginUser;
// Do Something...
}
'C#' 카테고리의 다른 글
C#: Property Copy (0) | 2021.11.28 |
---|---|
C#: 프로그램 구동 시 관리자 권한으로 재실행 (0) | 2021.11.22 |
C#: 아이콘 폰트를 사용해보자. (webdings, wingdings) (0) | 2021.03.28 |
C#: FileName(string)에 WildCard 검색 적용 (0) | 2021.02.28 |
C#: WinForm TitleBar에 DarkMode 적용하기 (0) | 2021.02.20 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday