Visual Basic サンプル集 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
列挙型の宣言
2021/3/14
列挙型のことを列挙体と表現する場合もあります。
一般的な列挙型の宣言
Public Enum BloodType
A
B
AB
O
End Enum
使用例
Dim userBloodType As BloodType
userBloodType = BloodType.A
列挙型の各値にXMLコメントを設定するとわかりやすいのでお勧めです。
Public Enum ShapeType
''' <summary>正方形・長方形</summary>
Rect
''' <summary>円・楕円</summary>
Oval
''' <summary>Rect以外のすべての多角形</summary>
Polygon
''' <summary>直線</summary>
Line
''' <summary>曲線</summary>
Curve
End Enum
値を指定した列挙型の宣言
Public Enum Appearance
None = 0
Fill = 1
Border = 2
Text = 4
Shadow = 8
End Enum
値を組み合わせて使う列挙型の宣言
<Flags>
Public Enum Appearance
None = 0
Fill = 1
Border = 2
Text = 4
Shadow = 8
End Enum
メモ:値を組み合わせて使用する列挙型の各値は0からはじめ、後は1,2,4,8,16,32など 2 の n乗 にするのが無難です。
メモ:値を組み合わせて使用する列挙型の場合、名前は Appearances のように複数形にすることが多いようです。
値を組み合わせて使用する例
Dim drawType As Appearance = Appearance.Border Or Appearance.Text
'If (drawType And Appearance.Text) = Appearance.Text Then '← VB2008以前の場合
If drawType.HasFlag(Appearance.Text) Then '← VB2010以降の場合
Debug.WriteLine("Text を含んでいます。")
End If
Debug.WriteLine(drawType.ToString)
この例を実行すると次のように表示されます。
Text を含んでいます。
Border, Text
Flags属性がなくてもこのプログラムは実行可能ですが、結果は次の通りになります。
Text を含んでいます。
6
型を指定した列挙型の宣言
Public Enum Appearance As Short
None = 0
Fill = 1
Border = 2
Text = 4
Shadow = 8
End Enum
メモ:指定できるデータ型は Byte, Integer, Long, SByte, Short, UInteger, ULong, UShort のどれかです。型を指定しなかった場合はIntegerになります。
参考:文字列型の列挙型のようなもの
文字列型や日付型など数値以外の型の列挙型は定義できません。似たようなものを実現するには通常の定数を利用するなどします。
Public Structure Nation
''' <summary>日本国内を対象とする場合</summary>
Public Const Japan As String = "日本"
''' <summary>中国本土を対象とする場合</summary>
Public Const China As String = "中華人民共和国"
''' <summary>アメリカ合衆国。プエルトリコ等海外領土を含まない範囲。</summary>
Public Const USA As String = "アメリカ合衆国"
''' <summary>ロシア連邦を構成するすべての国家</summary>
Public Const Russia As String = "ロシア連邦"
End Structure
使用例
Dim target As String = Nation.USA
Debug.WriteLine(target)
アメリカ合衆国 と出力されます。 → Debug.WriteLineが表示される場所
専用の型として定義することもできます。複雑になる割には見返りが少なくお勧めではありません。
''' <completionlist cref="Nation"/>
Public Structure Nation
''' <summary>日本国内を対象とする場合</summary>
Public Shared Property Japan As New Nation("日本")
''' <summary>中国本土を対象とする場合</summary>
Public Shared Property China As New Nation("中華人民共和国")
''' <summary>アメリカ合衆国。プエルトリコ等海外領土を含まない範囲。</summary>
Public Shared Property USA As New Nation("アメリカ合衆国")
''' <summary>ロシア連邦を構成するすべての国家</summary>
Public Shared Property Russia As New Nation("ロシア連邦")
Private rawValue As String
Public Sub New(rawValue As String)
Me.rawValue = rawValue
End Sub
Public Shared Widening Operator CType(value As Nation) As String
Return value.rawValue
End Operator
Public Shared Widening Operator CType(value As String) As Nation
Return New Nation(value)
End Operator
End Structure
メモ:以前(VB2015頃)までは、completionlist属性を使ったこの実装は、プログラム入力時に入力候補として表示され便利でした。Visual Studio 2019ではその機能はなくなっています。
使用例
Dim target As Nation = Nation.USA
Dim nationName As String = target
Debug.WriteLine(nationName)
アメリカ合衆国 と出力されます。 → Debug.WriteLineが表示される場所
参考
方法: 列挙型を宣言する - Visual Basic | Microsoft Docs
VB6でも Enum を使って列挙型を宣言します。