2006年05月29日

ComboBoxの初期化:その2

以前紹介したComboBoxの初期化は単純にテキスト項目をセットするものだった。
今回はVB6のItemDataに相当する表示テキストとは別の値(数値)をセットする方法である。

これは予想外に手間取った。結論から言えばVB.NETにItemDataに相当するプロパティは無い
オンラインマニュアル、サンプル、幾つかの参考書を調べても掲載されていないのだ。やっと見つけたのが「魔界の仮面弁士」さんの記事である。(この方は相当な経験と知識の持ち主である。これまでもオンラインソフトの開発では幾度となく助けられた。)
Addメソッドで登録できるのはVB6の場合はテキストのみだが、VB.NETではObject型に代わっている。つまりテキストの他何でも登録できるように進化している。
ただこれによってObject型の定義が事前に必要になってくる。共通モジュールにでも登録しておくといいだろう。

サンプルは前回のものを修正した。
VB6
Private Sub Form_Load()
With Combo1
.Clear
.Style = 2 'ドロップダウンリスト
.AddItem "その1"
.ItemData(.NewIndex) = 101 'ItemDataに値101をセット
.AddItem "その2"
.ItemData(.NewIndex) = 102
.AddItem "その3"
.ItemData(.NewIndex) = 103
.ListIndex = 0 '先頭を初期値に指定
End With
End Sub

'--- ItemDataを取り出す
Debug.Print Combo1.ItemData(Combo1.ListIndex)
 
VB.NET

'-- ComboBox用Item構造体 --
Public Structure ComboItem
Public Text As String '表示テキスト
Public Data As Integer '数値データ

'--- ToStringのオーバーライド(上書)
Public Overrides Function ToString() As String
Return Text
End Function

'--- コンストラクタ(Object生成時の初期化)の定義
Public Sub New(ByVal st As String, ByVal it As Integer)
Text = st
Data = it
End Sub
End Structure
 
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
With ComboBox1
.Text = ""
.Items.Clear()
.DropDownStyle = ComboBoxStyle.DropDownList
.BeginUpdate() 'EndUpdate()が呼び出されるまで描画しない
.Items.Add(New ComboItem("その1", 101))
.Items.Add(New ComboItem("その2", 102))
.Items.Add(New ComboItem("その3", 103))

.EndUpdate() 'ここで描画され、ちらつきが発生しない
.SelectedIndex = 0 '先頭を初期値に指定
End With
End Sub

'Dataの取り出し
Console.WriteLine DirectCast(ComboBox1.SelectedItem, ComboItem).Data



posted by なっちゃん at 15:32| 静岡 ☁| Comment(0) | TrackBack(0) | VB vs VB.NET | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。