2012-03-16 15 views
1

コンボボックスにすべてのコンピュータのタイムゾーンを設定してから、デフォルトでローカルタイムゾーンを選択します。私はコンボボックスを作成することができますが、デフォルトの項目を選択すると私は困惑します。TimeZoneInfoをComboboxに追加してSeletedItemバッフルを設定する

'load up the combobox with all time zones 
Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones() 
cboClockTmZone1.DataSource = tzCollection 

'the computers local time zone 
Dim myZone As TimeZoneInfo = TimeZoneInfo.Local 

'get the index of the local time zone in the collections 
Dim idx As Integer = tzCollection.IndexOf(myZone) 
Dim qdx As Integer = cboClockTmZone1.Items.IndexOf(myZone) 

'set the time zone 
'cboClockTmZone1.SelectedIndex = idx 'this works 
cboClockTmZone1.SelectedIndex = qdx 'this does not 

そのため、おそらくこれを理解するの私の不足が、私はコンボボックスにコレクションをバインドするとき、それがのTimeZoneInfoオブジェクトで満たされません。言い換えれば、TimeZoneInfo型の各リストアイテムではありませんか?もしそうなら、なぜqdxの割り当ては機能しませんか?私はコンボボックスでタイムゾーンオブジェクトを見つけることができなかったことを意味する-1を取得しますが、tzCollectionでそれを見つけることができます。私も.SelectedItemを使って実験しましたが、それはどちらも外に出ていませんでした。

私は、これがどのように機能するのか分かりません。これは、tzCollectionからcboアイテムへの1対1のマッピングがあると思うので、今は動作します。しかし、誰かがこの2つの方法で光を放つことができるので、私はよりよく理解できるので、私はそれを感謝するでしょう。

答えて

1

TimeZoneInfoクラスのバグが発生しています。彼らはObject.Equals()メソッドをオーバーライドするのを忘れていました。このバグはalready reportedであり、.NETの次のバージョンで修正されるはずです。それが4.5のためにそれを作ることを確信していない、それはすべきである。

+0

誰かがユニットテストを忘れてしまったように聞こえます! – IAbstract

+0

私がやっていることから、他にももっと有利な回避策がありますか? – sinDizzy

+0

あなたが持っているものは、私にはかなり良く見えます。 –

関連する問題