はじめに
これは、Visual Basic Advent Calendar 2019の15日目の記事となります。
※.NET Core 3.x というタイトルですが、.NET Core 3.1 を使ってます。
【2019/12/21追記】
Visual Studio のプレビュー版 Visual Studio 16.5 Preview 1 で、WinForms (.NET Core) がデザイナでプレビューできるようになりました。
Updates to .NET Core Windows Forms designer in Visual Studio 16.5 Preview 1
テンプレートにVBが無い
@tfukumori さんの「VB.NETの.NET CoreにおけるWinForms、WPFのサポートはどうなるのか」記事にあるようにテンプレートにVBがありません。
下記サイトによるとVBのサポートは残念ながら .NET 5
になったようです。.NET 3.1
でも駄目でした。
既存のプロジェクトテンプレートだとVBには対応していませんが.csproj
と同じような形に.vbproj
ファイルを書き換えればVBでもWindows Formsアプリケーションを作成することが可能です。
.NET Core 3.0 + F# でも WinForms がしたい!
環境
- Visual Studo 2019 Version 16.4.0 → 16.5 Preview 1
- .NET Core SDK 3.1
プロジェクトファイル
VBでもやってみました。 テンプレートについてはまだ理解が足りていないのか少しやってみたのですが駄目でした。
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<StartupObject>VBWinFormApp.Form1</StartupObject>
</PropertyGroup>
</Project>
特筆すべき点は特にないかもしれませんが、Sdk
を"Microsoft.NET.Sdk.WindowsDesktop"
に、<OutputType>をWinExe
に、<UseWindowsForms>
をtrue
に設定するぐらいでしょうか
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
<ItemGroup>
<Compile Update="Form1.vb">
<SubType>Form</SubType>
</Compile>
</ItemGroup>
</Project>
スタートアップオブジェクトをSub Main
からForm1
にします。
ソース
Public Class Form1
End Class
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
Inherits System.Windows.Forms.Form
'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Windows フォーム デザイナーで必要です。
Private components As System.ComponentModel.IContainer
'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
'Windows フォーム デザイナーを使用して変更できます。
'コード エディターを使って変更しないでください。
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(800, 450)
Me.Text = "Form1"
End Sub
End Class
結果
Windows Formsデザイナは表示されてこなかったですが、ビルドしたらフォームが出てきました。
C# でもWindows Formsデザイナは表示されてこなかったので、.NET Core Windows Forms Designer
の別途インストールが必要かも知れません。後で確認しておきます。
2019/12/21追記
Visual Studio 16.5 Preview 1 で、オプションでプレビュー機能を有効にする必要がありますが、Windows Formsデザイナが表示されるようになりました。
みなさんお待ちかね! WinForms がデザイナでポトペタ可能に!!
C# でポトペタが出来ることを確認した後に、VBでもポトペタができることを確認しました。
残念なところとして、ボタンを配置してクリックイベントの連携である Handles
句が自動で記述されるようにはなっていませんでした。ここは手動で記述する必要があります。
追記すればイベント処理が呼ばれてメッセージボックスが表示されてきます。
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MessageBox.Show("Hello! .NET Core 3.0")
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs)
End Sub
End Class
最後に
Microsoft担当者の発言によると
Microsoftには、アプリケーションイベント、アプリケーションモデル、シングルインスタンスアプリケーションなどのVB機能を完璧にしてから、テンプレートを追加したい、という意向がある。
個人プロジェクトとしてなら、無理矢理でもプロジェクトを作成することでVBが使用出来るのですが、仕事としてはMicrosoftが公式に作成してくれないことには現状では使用出来ないですね。