次の方法で共有


.NET Core 3.0 および 3.1 用 Windows フォームの破壊的変更

Windows フォームのサポートは、バージョン 3.0 の .NET Core に追加されました。 この記事では、導入された .NET バージョンによる Windows フォームの破壊的変更について説明します。 Windows フォーム アプリを .NET Framework または以前のバージョンの .NET Core (3.0 以降) からアップグレードする場合は、この記事が適用されます。

このページでは、次の重大な変更について説明します。

互換性に影響する変更点 導入されたバージョン
コントロールが削除されました 3.1
ヒントが表示されていると CellFormatting イベントが発生しない 3.1
Control.DefaultFont が Segoe UI 9 pt に変更されました 3.0
FolderBrowserDialog の最新化 3.0
SerializableAttribute が一部の Windows フォームの種類から削除 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 フォーム コントロールは使用できなくなりました。

説明の変更

.NET Core 3.1 以降では、さまざまな Windows フォーム コントロールは使用できなくなりました。 .NET Framework 2.0 では、より優れた設計とサポートを備える代替コントロールが導入されました。 非推奨のコントロールは、以前はデザイナー ツールボックスから削除されていましたが、引き続き使用できます。

次の種類は使用できなくなりました。

導入されたバージョン

3.1

削除された各コントロールには、推奨される置換コントロールがあります。 次の表を参照してください。

削除されたコントロール (API) 推奨される置換 削除される関連 API
コンテキストメニュー ContextMenuStrip
DataGrid DataGridView DataGridCell、DataGridRow、DataGridTableCollection、DataGridColumnCollection、DataGridTableStyle、DataGridColumnStyle、DataGridLineStyle、DataGridParentRowsLabel、DataGridParentRowsLabelStyle、DataGridBoolColumn、DataGridTextBox、GridColumnStylesCollection、GridTableStylesCollection、HitTestType
MainMenu MenuStrip
メニュー ToolStripDropDown、ToolStripDropDownMenu メニューアイテムコレクション
メニュー項目 ToolStripMenuItem
ツールバー ToolStrip ツールバーの外観
ToolBarButton ToolStripButton ToolBarButtonClickEventArgs、ToolBarButtonClickEventHandler、ToolBarButtonStyle、ToolBarTextAlign

カテゴリ

Windows フォーム

影響を受ける API


ツールチップが表示されている場合、CellFormatting イベントは発生しません。

DataGridView では、マウスでホバーしたときやキーボードで選択したときに、セルのテキストとエラーのツールチップが表示されるようになりました。 ツールヒントが表示されている場合、DataGridView.CellFormatting イベントは発生しません。

説明の変更

.NET Core 3.1 より前のバージョンでは、ShowCellToolTips プロパティが true に設定された DataGridView について、セルがマウスでホバーされると、セルのテキストやエラーを表示するツールチップが表示されていました。 キーボードを使用してセルを選択したときにヒントが表示されませんでした (たとえば、Tab キー、ショートカット キー、矢印ナビゲーションを使用)。 ユーザーがセルを編集した後、DataGridView がまだ編集モードで、ToolTipText プロパティが設定されていないセルの上にマウス ポインターを置いた場合、セルに表示するセルのテキストを書式設定するために CellFormatting イベントが発生しました。

アクセシビリティ標準を満たすために、.NET Core 3.1 以降では、ShowCellToolTips プロパティが true に設定されている DataGridView には、セルのテキストのヒントと、セルがホバーされたときだけでなく、キーボードで選択されたときのエラーも表示されます。 この変更の結果、DataGridView が編集モードの間に ToolTipText プロパティが設定されていないセルをポイントしても、CellFormatting イベントは発生しません。 ホバーされたセルの内容がセルではなくツールチップとして表示されるため、イベントは発生しません。

導入されたバージョン

3.1

DataGridView が編集モードの間に CellFormatting イベントに依存するすべてのコードをリファクタリングします。

カテゴリ

Windows フォーム

影響を受ける API

None


.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

フォームとコントロールのサイズが変更されたため、アプリケーションが正しくレンダリングされるようにします。

1 つのフォームの元のフォントを保持するには、既定のフォントを 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 フォーム

影響を受ける API

何一つ。


FolderBrowserDialog の最新化

FolderBrowserDialog コントロールは、.NET Core 用の Windows フォーム アプリケーションで変更されました。

説明の変更

.NET Framework では、Windows フォームでは、FolderBrowserDialog コントロールに対して次のダイアログが使用されます。

.NET Framework で FolderBrowserDialogControl を する

.NET Core 3.0 では、Windows フォームは Windows Vista で導入された新しい COM ベースのコントロールを使用します。

.NET Core での FolderBrowserDialogControl

導入されたバージョン

3.0

ダイアログは自動的にアップグレードされます。

元のダイアログを保持する場合は、次のコード フラグメントに示すように、ダイアログを表示する前に、FolderBrowserDialog.AutoUpgradeEnabled プロパティを false に設定します。

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

カテゴリ

Windows フォーム

影響を受ける API


SerializableAttribute が一部の Windows フォームの種類から削除されました

SerializableAttribute は、既知のバイナリ シリアル化シナリオがない一部の Windows フォーム クラスから削除されました。

説明の変更

次の型は、.NET Framework の SerializableAttribute で修飾されていますが、.NET Core では属性が削除されています。

これまで、このシリアル化メカニズムには重大なメンテナンスとセキュリティの問題がありました。 SerializableAttribute を型に維持することは、それらの型がバージョン間およびフレームワーク間のシリアル化の変更についてテストされる必要があることを意味します。 これにより、これらの型を進化させるのが難しくなり、メンテナンスにかかるコストが高くなる可能性があります。 これらの型には、属性の削除による影響を最小限に抑える既知のバイナリ シリアル化シナリオはありません。

詳細については、「バイナリシリアル化を参照してください。

導入されたバージョン

3.0

シリアル化可能としてマークされているこれらの型に依存する可能性があるコードを更新します。

カテゴリ

Windows フォーム

影響を受ける API

  • None

AllowUpdateChildControlIndexForTabControls の互換性スイッチはサポートされていません

Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 互換性スイッチは、.NET Framework 4.6 以降のバージョンの Windows フォームでサポートされていますが、.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 フォーム

影響を受ける API

  • None

DomainUpDown.UseLegacyScrolling 互換性スイッチはサポートされていません

.NET Framework 4.7.1 で導入された Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

説明の変更

.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 フォーム

影響を受ける API


DoNotLoadLatestRichEditControl 互換性スイッチがサポートされていません

.NET Framework 4.7.1 で導入された Switch.System.Windows.Forms.UseLegacyImages 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

説明の変更

.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 フォーム

影響を受ける API


DoNotSupportSelectAllShortcutInMultilineTextBox 互換性スイッチがサポートされない

.NET Framework 4.6.1 で導入された Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 互換性スイッチは、.NET Core および .NET 5.0 以降の Windows フォームではサポートされていません。

説明の変更

.NET Framework 4.6.1 以降では、TextBox コントロールで Ctrl + A ショートカット キーを選択すると、すべてのテキストが選択されました。 .NET Framework 4.6 以前のバージョンでは、Textbox.ShortcutsEnabled プロパティと プロパティの両方が に設定されている場合、 ショートカット キー 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 フォーム

影響を受ける API

  • None

DontSupportReentrantFilterMessage 互換性スイッチがサポートされていません

.NET Framework 4.6.1 で導入された Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 互換性スイッチは、.NET Core および .NET 5.0 以降の Windows フォームではサポートされていません。

説明の変更

.NET Framework 4.6.1 以降では、Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 互換性スイッチは、カスタム IMessageFilter.PreFilterMessage 実装で Application.FilterMessage メッセージが呼び出されたときに発生する可能性のある IndexOutOfRangeException 例外に対処します。 詳細については、「対策: Custom IMessageFilter.PreFilterMessage 実装」を参照してください。

.NET Core および .NET 5.0 以降では、Switch.System.Windows.Forms.DontSupportReentrantFilterMessage スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API


EnableVisualStyleValidation 互換性スイッチはサポートされていません

Switch.System.Windows.Forms.EnableVisualStyleValidation 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

説明の変更

.NET Framework では、Switch.System.Windows.Forms.EnableVisualStyleValidation 互換性スイッチを使用すると、アプリケーションは数値形式で指定されたビジュアル スタイルの検証をオプトアウトできます。

.NET Core および .NET 5.0 以降では、Switch.System.Windows.Forms.EnableVisualStyleValidation スイッチはサポートされていません。

導入されたバージョン

3.0

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API

  • None

UseLegacyContextMenuStripSourceControlValue 互換性スイッチはサポートされていません

.NET Framework 4.7.2 で導入された Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

説明の変更

.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

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API


UseLegacyImages 互換性スイッチはサポートされていません

.NET Framework 4.8 で導入された Switch.System.Windows.Forms.UseLegacyImages 互換性スイッチは、.NET Core または .NET 5.0 以降の Windows フォームではサポートされていません。

説明の変更

.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

スイッチを取り外します。 スイッチはサポートされておらず、代替機能は使用できません。

カテゴリ

Windows フォーム

影響を受ける API

  • None

About テンプレートと SplashScreen テンプレートが壊れている

Visual Studio によって生成された About.vb ファイルと SplashScreen.vb ファイルには、.NET Core 3.0 および 3.1 を使用できない My 名前空間内の型への参照が含まれています。

導入されたバージョン

3.0

説明の変更

.NET Core 3.0 および 3.1 には、Visual Basic My の完全なサポートは含まれません。 Visual Basic Windows フォーム アプリ用の Visual Studio の About および SplashScreen フォーム テンプレートでは、使用できない My.Application.Info 型のプロパティが参照されています。

Visual Basic My のサポートが .NET 5 で改善され、プロジェクトが .NET 5 以降にアップグレードされました。

-又は-

アプリの About および SplashScreen の種類のコンパイラ エラーを修正します。 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

SplashScreen

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

カテゴリ

Visual Basic Windows Forms

影響を受ける API

None


関連項目