다음을 통해 공유


.NET Core 3.0 및 3.1용 Windows Forms의 주요 변경 내용

Windows Forms 지원은 버전 3.0에서 .NET Core에 추가되었습니다. 이 문서에서는 Windows Forms가 도입된 .NET 버전별 주요 변경 내용을 나열합니다. .NET Framework 또는 이전 버전의 .NET Core(3.0 이상)에서 Windows Forms 앱을 업그레이드하는 경우 이 문서가 적용됩니다.

이 페이지에는 다음과 같은 주요 변경 내용이 설명되어 있습니다.

호환성이 손상되는 변경 도입된 버전
제거된 컨트롤 3.1
CellFormatting 이벤트가 도구 설명이 표시되는 경우 발동되지 않습니다. 3.1
Control.DefaultFont가 Segoe UI 9 pt로 변경되었습니다 3.0
FolderBrowserDialog 현대화 3.0
일부 Windows Forms 형식에서 SerializableAttribute가 제거됨 3.0
AllowUpdateChildControlIndexForTabControls 호환성 스위치는 지원되지 않습니다. 3.0
DomainUpDown.UseLegacyScrolling 호환성 스위치가 지원되지 않습니다 3.0
DoNotLoadLatestRichEditControl 호환성 스위치는 지원되지 않습니다 3.0
DoNotSupportSelectAllShortcutInMultilineTextBox 호환성 스위치는 지원되지 않습니다 3.0
DontSupportReentrantFilterMessage 호환성 스위치는 지원되지 않습니다 3.0
EnableVisualStyleValidation 호환성 스위치는 지원되지 않습니다 3.0
UseLegacyContextMenuStripSourceControlValue 호환성 스위치는 지원되지 않습니다 3.0
UseLegacyImages 호환성 스위치가 지원되지 않습니다 3.0
Visual Basic에 대한 About 및 SplashScreen 템플릿이 손상되었습니다. 3.0

.NET Core 3.1

제거된 컨트롤

.NET Core 3.1부터 일부 Windows Forms 컨트롤을 더 이상 사용할 수 없습니다.

설명 변경

.NET Core 3.1부터 다양한 Windows Forms 컨트롤을 더 이상 사용할 수 없습니다. 더 나은 디자인과 지원을 제공하는 대체 컨트롤이 .NET Framework 2.0에 도입되었습니다. 사용되지 않는 컨트롤은 이전에 디자이너 도구 상자에서 제거되었지만 여전히 사용할 수 있었습니다.

다음 형식은 더 이상 사용할 수 없습니다.

도입된 버전

3.1

제거된 각 컨트롤에는 권장되는 대체 컨트롤이 있습니다. 다음 표를 참조하세요.

제거된 컨트롤(API) 권장 교체 관련된 API가 제거됨
컨텍스트 메뉴 컨텍스트 메뉴 스트립
DataGrid DataGridView DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
주메뉴 메뉴 스트립
메뉴 ToolStripDropDown(도구 막대 드롭다운), ToolStripDropDownMenu(도구 막대 드롭다운 메뉴) 메뉴 항목 컬렉션
메뉴 항목 ToolStripMenuItem
도구 모음 ToolStrip 툴바 외형
도구 모음 버튼 도구 모음 버튼 ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

범주

윈도우 폼

영향을 받는 API


툴팁이 표시될 경우 CellFormatting 이벤트가 발생하지 않습니다.

이제 DataGridView는 마우스로 셀 위에 가리키거나 키보드로 선택할 때 셀의 텍스트와 오류 툴팁을 표시합니다. 툴팁이 표시되면 DataGridView.CellFormatting 이벤트가 발생하지 않습니다.

설명 변경

.NET Core 3.1 이전에는 ShowCellToolTips 속성이 true로 설정된 DataGridView 셀이 마우스를 가리키면 셀의 텍스트와 오류에 대한 툴팁이 표시되었습니다. 키보드를 통해 셀을 선택할 때 도구 설명이 표시되지 않았습니다(예: Tab 키, 바로 가기 키 또는 화살표 탐색 사용). 사용자가 셀을 편집했을 때, DataGridView가 여전히 편집 모드인 동안 ToolTipText 속성이 설정되지 않은 셀 위에 마우스를 올리면, 셀에 표시할 텍스트를 서식화하기 위한 CellFormatting 이벤트가 발생합니다.

접근성 표준을 충족하기 위해 .NET Core 3.1부터 ShowCellToolTips 속성이 true로 설정된 DataGridView이 마우스로 가리킬 때뿐만 아니라 키보드를 통해 선택한 경우에도 셀 텍스트 및 오류에 대한 도구 설명을 표시합니다. 이 변경의 결과로 편집 모드에 있는 동안 속성 집합이 없는 셀을 마우스로 가리키면 이벤트가 발생하지 . 마우스를 올린 셀의 내용이 셀에 표시되는 대신 툴팁으로 표시되기 때문에 이벤트가 발생하지 않습니다.

도입된 버전

3.1

DataGridView 편집 모드에 있는 동안 CellFormatting 이벤트에 종속된 코드를 리팩터링합니다.

범주

Windows Forms

영향을 받는 API

없음


.NET Core 3.0

기본 컨트롤 글꼴이 Segoe UI 9 pt로 변경됨

설명 변경

.NET Framework에서 Control.DefaultFont 속성은 Microsoft Sans Serif 8.25 pt로 설정되었습니다. 다음 이미지는 기본 글꼴을 사용하는 창을 보여줍니다.

.NET Framework의 기본 컨트롤 글꼴

.NET Core 3.0부터 기본 글꼴은 Segoe UI 9 pt(SystemFonts.MessageBoxFont동일한 글꼴)로 설정됩니다. 이러한 변경으로 인해 폼과 컨트롤의 크기가 약 27% 더 커져, 새 기본 글꼴의 크기 증가를 반영합니다. 예를 들어:

.NET Core 기본 컨트롤 글꼴

이 변경은 Windows 사용자 경험(UX) 지침에 맞춰졌습니다.

도입된 버전

3.0

양식 및 컨트롤의 크기가 변경되어 애플리케이션이 올바르게 렌더링되는지 확인합니다.

단일 폼의 원래 글꼴을 유지하려면 기본 글꼴을 Microsoft Sans Serif 8.25 pt으로 설정하십시오. 예를 들어:

public MyForm()
{
    InitializeComponent();
    Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}

또는 다음 방법 중 하나를 사용하여 전체 애플리케이션의 기본 글꼴을 변경할 수 있습니다.

  • ApplicationDefaultFont MSBuild 속성을 "Microsoft Sans Serif, 8.25pt"로 설정합니다. Visual Studio에서 디자이너의 새 설정을 사용할 수 있으므로 이 방법을 사용하는 것이 좋습니다.

    <PropertyGroup>
      <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
    </PropertyGroup>
    
  • Application.SetDefaultFont(Font)을 호출하여.

    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());
        }
    }
    

범주

  • Windows Forms

영향을 받는 API

없음.


FolderBrowserDialog의 현대화

.NET Core용 Windows Forms 애플리케이션에서 FolderBrowserDialog 컨트롤이 변경되었습니다.

설명 변경

.NET Framework에서 Windows Forms는 FolderBrowserDialog 컨트롤에 다음 대화 상자를 사용합니다.

.NET Framework의 FolderBrowserDialogControl

.NET Core 3.0에서 Windows Forms는 Windows Vista에서 도입된 최신 COM 기반 컨트롤을 사용합니다.

.NET Core에서의 FolderBrowserDialogControl

도입된 버전

3.0

대화 상자가 자동으로 업그레이드됩니다.

원래 대화 상자를 유지하려면 다음 코드 조각과 같이 대화 상자를 표시하기 전에 FolderBrowserDialog.AutoUpgradeEnabled 속성을 false 설정합니다.

var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();

범주

Windows Forms

영향을 받는 API


일부 Windows Forms 형식에서 제거된 SerializableAttribute

알려진 이진 serialization 시나리오가 없는 일부 Windows Forms 클래스에서 해당 SerializableAttribute가 제거되었다.

설명 변경

다음 형식은 .NET Framework에서는 SerializableAttribute로 데코레이트되었지만 .NET Core에서는 특성이 해제되었습니다.

지금까지 이 serialization 메커니즘에는 심각한 유지 관리 및 보안 문제가 있었습니다. 형식에 대한 SerializableAttribute 유지 관리한다는 것은 해당 형식이 버전 간 직렬화 변경 및 잠재적으로 프레임워크 간 직렬화 변경에 대해 테스트되어야 한다는 것을 의미합니다. 이렇게 하면 이러한 형식을 발전하기가 더 어려워지고 유지 관리 비용이 많이 들 수 있습니다. 이러한 형식에는 알려진 이진 직렬화 시나리오가 없으므로 속성을 제거해도 영향이 최소화됩니다.

자세한 내용은 이진 직렬화을 참조하세요.

도입된 버전

3.0

직렬화 가능으로 표시되는 이러한 형식에 따라 달라질 수 있는 코드를 업데이트합니다.

범주

윈도우 폼 (Windows Forms)

영향을 받는 API

  • 없음

AllowUpdateChildControlIndexForTabControls 호환성 스위치가 지원되지 않음

Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 호환성 스위치는 .NET Framework 4.6 이상 버전의 Windows Forms에서 지원되지만 .NET Core 또는 .NET 5.0 이상에서는 지원되지 않습니다.

설명 변경

.NET Framework 4.6 이상 버전에서 탭을 선택하면 컨트롤 컬렉션이 다시 정렬됩니다. Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 호환성 스위치를 사용하면 이 동작이 바람직하지 않은 경우 애플리케이션에서 이 순서를 건너뛸 수 있습니다.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API

  • 없음

DomainUpDown.UseLegacyScrolling 호환성 스위치가 지원되지 않음

.NET Framework 4.7.1에서 도입된 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.7.1부터 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 호환성 스위치를 통해 개발자는 독립적인 DomainUpDown.DownButton()DomainUpDown.UpButton() 작업에서 옵트아웃할 수 있습니다. 스위치는 컨텍스트 텍스트가 있는 경우 DomainUpDown.UpButton() 무시되는 레거시 동작을 복원했으며, 개발자는 DomainUpDown.UpButton() 작업 전에 컨트롤에서 DomainUpDown.DownButton() 작업을 사용해야 합니다. 더 자세한 정보를 보려면 <AppContextSwitchOverrides> 요소를 참조하시기 바랍니다.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms (윈도우 폼)

영향을 받는 API


DoNotLoadLatestRichEditControl 호환성 스위치가 지원되지 않음

.NET Framework 4.7.1에서 도입된 Switch.System.Windows.Forms.UseLegacyImages 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.6.2 및 이전 버전에서 RichTextBox 컨트롤은 Win32 RichEdit 컨트롤 v3.0을 인스턴스화하고.NET Framework 4.7.1을 대상으로 하는 애플리케이션의 경우 RichTextBox 컨트롤은 RichEdit v4.1(msftedit.dll)을 인스턴스화합니다. Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl 호환성 스위치는 .NET Framework 4.7.1 이상 버전을 대상으로 하는 애플리케이션이 새 RichEdit v4.1 컨트롤을 옵트아웃하고 이전 RichEdit v3 컨트롤을 대신 사용할 수 있도록 하기 위해 도입되었습니다.

.NET Core 및 .NET 5.0 이상 버전에서는 Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl 스위치가 지원되지 않습니다. RichTextBox 컨트롤의 새 버전만 지원됩니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API


DoNotSupportSelectAllShortcutInMultilineTextBox 호환성 스위치가 지원되지 않음

.NET Framework 4.6.1에서 도입된 Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 호환성 스위치는 .NET Core 및 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.6.1부터 Ctrl + TextBox 컨트롤의 바로 가기 키를 선택하면 모든 텍스트가 선택됩니다. .NET Framework 4.6 및 이전 버전에서 Textbox.ShortcutsEnabledTextBox.Multiline 속성이 모두 true로 설정된 경우, Ctrl + 바로 가기 키를 선택해도 모든 텍스트가 선택되지 않았습니다. Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 호환성 스위치는 원래 동작을 유지하기 위해 .NET Framework 4.6.1에 도입되었습니다. 자세한 내용은 TextBox.ProcessCmdKey참조하세요.

.NET Core 및 .NET 5.0 이상 버전에서는 Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API

  • 없음

DontSupportReentrantFilterMessage 호환성 스위치가 지원되지 않음

.NET Framework 4.6.1에서 도입된 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 호환성 스위치는 .NET Core 및 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.6.1부터 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 호환성 스위치는 사용자 지정 IMessageFilter.PreFilterMessage 구현을 사용하여 Application.FilterMessage 메시지를 호출할 때 가능한 IndexOutOfRangeException 예외를 해결합니다. 자세한 내용은 문제 해결: 사용자 지정 IMessageFilter.PreFilterMessage 구현를 참조하세요.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API


EnableVisualStyleValidation 호환성 스위치가 지원되지 않음

Switch.System.Windows.Forms.EnableVisualStyleValidation 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework에서 Switch.System.Windows.Forms.EnableVisualStyleValidation 호환성 스위치를 사용하면 애플리케이션이 숫자 형식으로 제공된 시각적 스타일의 유효성 검사를 옵트아웃할 수 있습니다.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.EnableVisualStyleValidation 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms (윈도우 폼즈)

영향을 받는 API

  • 없음

UseLegacyContextMenuStripSourceControlValue 호환성 스위치가 지원되지 않음

.NET Framework 4.7.2에서 도입된 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.7.2부터 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 호환성 스위치를 사용하면 개발자가 소스 제어에 대한 참조를 반환하는 ContextMenuStrip.SourceControl 속성의 새 동작을 옵트아웃할 수 있습니다. 속성의 이전 동작은 null반환하는 것이었습니다. 자세한 내용은 <AppContextSwitchOverrides> 요소참조하세요.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

윈도우즈 폼

영향을 받는 API


UseLegacyImages 호환성 스위치가 지원되지 않음

.NET Framework 4.8에서 도입된 Switch.System.Windows.Forms.UseLegacyImages 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.8부터 Switch.System.Windows.Forms.UseLegacyImages 호환성 스위치는 높은 DPI 환경의 ClickOnce 시나리오에서 가능한 이미지 크기 조정 문제를 해결했습니다. true설정하면 사용자가 확장이 100%이상으로 설정된 높은 DPI 디스플레이에서 레거시 이미지 크기 조정을 복원할 수 있습니다. 자세한 내용은 GitHub의 .NET Framework 4.8 릴리스 정보 참조하세요.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.UseLegacyImages 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

윈도우 폼스

영향을 받는 API

  • 없음

About 및 SplashScreen 템플릿이 손상됨

Visual Studio에서 생성된 About.vbSplashScreen.vb 파일에는 .NET Core 3.0 및 3.1을 사용할 수 없는 My 네임스페이스의 형식에 대한 참조가 포함되어 있습니다.

도입된 버전

3.0

설명 변경

.NET Core 3.0 및 3.1에는 전체 Visual Basic My 지원이 포함되어 있지 않습니다. Visual Studio for Visual Basic Windows Forms 앱의 SplashScreen 양식 서식 파일은 사용 불가능한 My.Application.Info 형식의 속성을 참조합니다.

Visual Basic My 지원이 .NET 5에서 개선되어 프로젝트를 .NET 5 이상으로 업그레이드했습니다.

-또는-

앱의 AboutSplashScreen 유형에서 컴파일러 오류를 수정합니다. System.Reflection.Assembly 클래스를 사용하여 My.Application.Info 형식에서 제공하는 정보를 가져옵니다. 두 가지 형식의 직접 포트가 여기에서 제공됩니다.

샘플 코드이며 최적이 아닌 코드입니다. 양식 로드 시간을 줄이기 위해 특성 목록을 캐시해야 합니다.

정보

Imports System.Reflection

Public NotInheritable Class About

    Private Sub about_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Set the title of the form.
        Dim applicationTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title

        If String.IsNullOrEmpty(applicationTitle) Then
            applicationTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
        End If

        Me.Text = String.Format("About {0}", applicationTitle)
        ' Initialize all of the text displayed on the About Box.
        ' TODO: Customize the application's assembly information in the "Application" pane of the project
        '    properties dialog (under the "Project" menu).
        Me.LabelProductName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyProductAttribute)()?.Product, "")
        Me.LabelVersion.Text = String.Format("Version {0}", Assembly.GetExecutingAssembly().GetName().Version)
        Me.LabelCopyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
        Me.LabelCompanyName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCompanyAttribute)()?.Company, "")
        Me.TextBoxDescription.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyDescriptionAttribute)()?.Description, "")
    End Sub

    Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
        Me.Close()
    End Sub

End Class

스플래시 스크린

Imports System.Reflection

Public NotInheritable Class SplashScreen

    Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Set up the dialog text at runtime according to the application's assembly information.  

        'TODO: Customize the application's assembly information in the "Application" pane of the project
        '  properties dialog (under the "Project" menu).

        'Application title
        Dim appTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title

        If String.IsNullOrEmpty(appTitle) Then
            appTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
        End If

        ApplicationTitle.Text = appTitle

        Dim versionValue = Assembly.GetExecutingAssembly().GetName().Version

        'Format the version information using the text set into the Version control at design time as the
        '  formatting string.  This allows for effective localization if desired.
        '  Build and revision information could be included by using the following code and changing the
        '  Version control's designtime text to "Version {0}.{1:00}.{2}.{3}" or something similar.  See
        '  String.Format() in Help for more information.
        '
        '    Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor, versionValue.Build, versionValue.Revision)

        Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor)

        'Copyright info
        Copyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
    End Sub

End Class

범주

비주얼 베이직 윈도우 폼

영향을 받는 API

없음


참고