이 문서에서는 .NET 6의 새로운 Windows Forms 기능 및 향상된 기능에 대해 설명합니다.
.NET Framework에서 .NET 6으로 이동할 때 알아야 할 몇 가지 중대한 변경 사항이 있습니다. 자세한 내용은 Windows Forms의 주요 변경 사항를 확인하세요.
업데이트된 C#용 템플릿
.NET 6에는 표준 콘솔 애플리케이션 템플릿에 대한 변경 사항이 많이 적용되었습니다. 이러한 변경 사항에 따라 C#의 Windows Forms 템플릿이 global using 지시문, 파일 범위 네임스페이스 및 null 허용 참조 형식을 기본적으로 사용하도록 설정됩니다.
Windows Forms로 이전되지 않은 새 C# 템플릿의 한 가지 기능은 최상위 문입니다. 일반적인 Windows Forms 애플리케이션에는 [STAThread] 특성이 필요하고 디자이너 코드 파일과 같은 여러 파일로 분할된 여러 형식으로 구성되므로 최상위 문을 사용하는 것은 의미가 없습니다.
새 애플리케이션 부트스트랩
새 Windows Forms 애플리케이션을 생성하는 템플릿은 애플리케이션이 실행되면 애플리케이션의 진입점 역할을 하는 Main 메서드를 만듭니다. 이 메서드에는 Windows Forms를 구성하고 부트스트랩 코드라고 하는 첫 번째 폼을 표시하는 코드가 포함되어 있습니다.
class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
.NET 6에서 이러한 템플릿은 ApplicationConfiguration.Initialize 메서드에서 호출하는 새 부트스트랩 코드를 사용하도록 수정되었습니다.
class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
}
}
이 메서드는 컴파일 시간에 자동으로 생성되고 Windows Forms를 구성하는 코드를 포함합니다. 프로젝트 파일이 지금 이러한 설정을 제어할 수 있으며, 코드에서 이를 구성하지 않아도 됩니다. 예를 들어 생성된 메서드는 다음 코드와 유사합니다.
public static void Initialize()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.SetHighDpiMode(HighDpiMode.SystemAware);
}
새 부트스트랩 코드는 Visual Studio에서 Windows Forms 비주얼 디자이너를 구성하는 데 사용됩니다. 새 부트스트랩 코드 사용을 옵트아웃하는 경우 이전 코드를 복원하고 ApplicationConfiguration.Initialize 메서드를 바이패스하여 Windows Forms 비주얼 디자이너는 설정한 부트스트랩 설정을 존중하지 않습니다.
Initialize 메서드에서 생성된 설정은 프로젝트 파일에 의해 제어됩니다.
프로젝트 수준 애플리케이션 설정
Windows Forms의 새 애플리케이션 부트스트랩 기능을 보완하기 위해 애플리케이션의 시작 코드에서 이전에 설정한 몇 가지 Application 설정을 프로젝트 파일에 설정해야 합니다. 프로젝트 파일은 다음 애플리케이션 설정을 구성할 수 있습니다.
| 프로젝트 설정 | 기본값 | 해당 API |
|---|---|---|
| ApplicationVisualStyles | true |
Application.EnableVisualStyles |
| ApplicationUseCompatibleTextRendering(애플리케이션 사용 호환 텍스트 렌더링) | false |
Application.SetCompatibleTextRenderingDefault |
| ApplicationHighDpiMode | SystemAware |
Application.SetHighDpiMode |
| ApplicationDefaultFont | Segoe UI, 9pt |
Application.SetDefaultFont |
다음 예제에서는 이러한 애플리케이션 관련 속성을 설정하는 프로젝트 파일을 보여줍니다.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
<ApplicationVisualStyles>true</ApplicationVisualStyles>
<ApplicationUseCompatibleTextRendering>false</ApplicationUseCompatibleTextRendering>
<ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>
<ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
</PropertyGroup>
</Project>
Windows Forms 비주얼 디자이너에서 이러한 설정을 사용합니다. 자세한 내용은 Visual Studio 디자이너 개선 사항 섹션을 참조하세요.
기본 글꼴 변경
.NET Core 3.0의 Windows Forms에서 Windows Forms 대한 새 기본 글꼴인 Segoe UI, 9pt가 도입되었습니다. 이 글꼴은 Windows UX(사용자 환경) 지침에 부합합니다. 하지만 .NET Framework는 기본 글꼴로 Microsoft Sans Serif, 8.25pt를 사용합니다. 이러한 변경으로 인해 일부 고객이 .NET Framework에서 픽셀 단위까지 완벽한 레이아웃을 사용하는 많은 애플리케이션을 .Net으로 마이그레이션하는 것이 어려워집니다. 전체 애플리케이션의 글꼴을 변경하는 유일한 방법은 프로젝트의 모든 양식을 편집하여 Font 속성을 대체 글꼴로 설정하는 것이었습니다.
이제 기본 글꼴을 다음과 같은 두 가지 방법으로 설정할 수 있습니다.
애플리케이션 부트스트랩 코드에서 사용할 프로젝트 파일의 기본 글꼴을 설정합니다.
중요합니다
선호되는 방법입니다. 프로젝트를 사용하여 새 애플리케이션 부트스트랩 시스템을 구성하면 Visual Studio에서 디자이너에 있는 설정을 사용할 수 있습니다.
다음 예제에서 프로젝트 파일은 .NET Framework에서 사용하는 것과 동일한 글꼴을 사용하도록 Windows Forms를 구성합니다.
<Project Sdk="Microsoft.NET.Sdk"> <!-- other settings --> <PropertyGroup> <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont> </PropertyGroup> </Project>
-또는-
Application.SetDefaultFont API를 이전 방식으로 호출(디자이너 지원 없음):
class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.SetDefaultFont(new Font(new FontFamily("Microsoft Sans Serif"), 8.25f)); Application.Run(new Form1()); } }
Visual Studio 디자이너 개선 사항
Windows Forms 비주얼 디자이너는 이제 기본 글꼴을 정확하게 반영합니다. 이전 버전의 .NET용 Windows Forms 비주얼 디자이너에서 Segoe UI 글꼴이 제대로 표시되지 않았으며 실제로 .NET Framework 기본 글꼴로 양식을 디자인했습니다. 새 애플리케이션 부트스트랩 기능으로 인해 비주얼 디자이너는 기본 글꼴을 정확하게 반영합니다. 추가로 비주얼 디자이너는 프로젝트 파일에 설정된 기본 글꼴을 존중합니다.
더 많은 런타임 디자이너들
.NET Framework에 존재하고 보고서 디자이너 작성과 같은 범용 디자이너 빌드를 사용하도록 설정하는 디자이너가 .NET 6에 추가되었습니다.
- System.ComponentModel.Design.ComponentDesigner
- System.Windows.Forms.Design.ButtonBaseDesigner
- System.Windows.Forms.Design.ComboBoxDesigner
- System.Windows.Forms.Design.ControlDesigner
- System.Windows.Forms.Design.DocumentDesigner
- System.Windows.Forms.Design.DocumentDesigner
- System.Windows.Forms.Design.FormDocumentDesigner
- System.Windows.Forms.Design.GroupBoxDesigner
- System.Windows.Forms.Design.LabelDesigner
- System.Windows.Forms.Design.ListBoxDesigner
- System.Windows.Forms.Design.ListViewDesigner
- System.Windows.Forms.Design.MaskedTextBoxDesigner
- System.Windows.Forms.Design.PanelDesigner
- System.Windows.Forms.Design.ParentControlDesigner
- System.Windows.Forms.Design.ParentControlDesigner
- System.Windows.Forms.Design.PictureBoxDesigner
- System.Windows.Forms.Design.RadioButtonDesigner
- System.Windows.Forms.Design.RichTextBoxDesigner
- System.Windows.Forms.Design.ScrollableControlDesigner
- System.Windows.Forms.Design.ScrollableControlDesigner
- System.Windows.Forms.Design.TextBoxBaseDesigner
- System.Windows.Forms.Design.TextBoxDesigner
- System.Windows.Forms.Design.ToolStripDesigner
- System.Windows.Forms.Design.ToolStripDropDownDesigner
- System.Windows.Forms.Design.ToolStripItemDesigner
- System.Windows.Forms.Design.ToolStripMenuItemDesigner
- System.Windows.Forms.Design.TreeViewDesigner
- System.Windows.Forms.Design.UpDownBaseDesigner
- System.Windows.Forms.Design.UserControlDocumentDesigner
PerMonitorV2에 대한 높은 DPI 향상
PerMonitorV2를 사용하는 높은 DPI 렌더링이 향상되었습니다.
컨트롤은 애플리케이션과 동일한 DPI 인식을 사용하여 생성됩니다.
컨테이너 컨트롤 및 MDI 자식 창에서 크기 조정 동작이 향상되었습니다.
예를 들어 .NET 5에서 200% 크기 조정을 사용하는 모니터로에서 Windows Forms 앱을 100% 크기 조정으로 이동하면 컨트롤이 잘못 배치될 수 있었습니다. 이 점이 .NET 6에서 크게 개선되었습니다.
새로운 API
- System.Windows.Forms.Application.SetDefaultFont
- System.Windows.Forms.Control.IsAncestorSiteInDesignMode
- System.Windows.Forms.ProfessionalColors.StatusStripBorder
- System.Windows.Forms.ProfessionalColorTable.StatusStripBorder
새 Visual Basic API
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventHandler
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.MinimumSplashScreenDisplayTime
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.MinimumSplashScreenDisplayTime
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.Font
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.Font
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.HighDpiMode
- Microsoft.VisualBasic.ApplicationServices.ApplyApplicationDefaultsEventArgs.HighDpiMode
- Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.ApplyApplicationDefaults
- Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.HighDpiMode
- Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.HighDpiMode
업데이트된 API
System.Windows.Forms.Control.Invoke에서 이제 System.Action 및 System.Func<TResult>를 입력 매개 변수로 허용합니다.
System.Windows.Forms.Control.BeginInvoke는 이제 System.Action을 입력 매개 변수로 허용합니다.
System.Windows.Forms.DialogResult는 다음 멤버로 확장됩니다.
TryAgainContinue
System.Windows.Forms.Form에 새 속성 추가: MdiChildrenMinimizedAnchorBottom
System.Windows.Forms.MessageBoxButtons는 다음 멤버로 확장됩니다.
CancelTryContinue
System.Windows.Forms.MessageBoxDefaultButton는 다음 멤버로 확장됩니다.
Button4
System.Windows.Forms.LinkClickedEventArgs에 이제 새 생성자가 있고 다음 속성으로 확장됩니다.
System.Windows.Forms.NotifyIcon.Text는 이제 (63자에서) 127자로 제한됩니다.
향상된 접근성
Microsoft UI 자동화 패턴은 내레이터 및 Jaws와 같은 접근성 도구에서 더 효과적입니다.
참고하십시오
.NET Desktop feedback