今日は DomainUpDown です。実は私は存在を知りませんでした。
何と言うか、微妙な UI ですねぇ~。
普通に使うには Items に使う DataSource の指定もできないのかー。
素直に ComboBox の使う方が個人的には楽かもなーと思いました。
UpDownBase クラスを継承しているので、他の UpDownBase クラスの派生クラスのモノ(よく使う NumericUpDown)
と使い方はほとんど同じ。
UpDownBase が何故 ContainerControl を継承しているのも興味深いです。なんでだろ。
■参考文献
DomainUpDown クラス
UpDownBase クラス
■実行画像
下のコードの実行結果は全てえでんさんが選択された状態になります。
Public Class DomainUpDownTest
Private Sub DomainUpDownTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.DomainUpDown1.Items.Add("ふじこ")
Me.DomainUpDown1.Items.Add("えでん")
Me.DomainUpDown1.Items.Add("オット")
Me.DomainUpDown1.Wrap = True ' オットの次はふじこに戻る
Me.DomainUpDown1.SelectedIndex = 1 ' エデンを選択
Dim myCollection As ICollection = _
DirectCast(Me.DomainUpDown1.Items.Clone(), ICollection)
Me.DomainUpDown2.Items.AddRange(myCollection)
Me.DomainUpDown2.InterceptArrowKeys = False ' 矢印キー入力不可
Me.DomainUpDown2.SelectedItem = "ふじこ" ' ふじこを選択
Me.DomainUpDown2.DownButton() '1 個↓へ進める
Dim myList As List(Of String) = New List(Of String)
myList.Add("fujiko")
myList.Add("eden")
myList.Add("otto")
Me.DomainUpDown3.Items.AddRange(myList)
Me.DomainUpDown3.ReadOnly = True ' ユーザーに項目の自由入力をさせない
Me.DomainUpDown3.Sorted = True ' ソートした状態にする
Me.DomainUpDown3.SelectedItem = myList(0) ' fujiko を選択
Me.DomainUpDown3.UpButton() '1 個↑へ進める
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Form 上にある DomainUpDown の選択 Index と 選択値を出力する
For Each cntrl As Control In Me.Controls
If TypeOf (cntrl) Is DomainUpDown Then
Dim dd As DomainUpDown = DirectCast(cntrl, DomainUpDown)
System.Diagnostics.Debug.WriteLine(dd.Name & " の選択値:" & _
dd.SelectedIndex.ToString() & " 番目:" & _
Convert.ToString(dd.SelectedItem))
End If
Next
End Sub
End Class