tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルコンボボックスのクリックイベントでのDB接続について
記事No715
投稿日: 2004/02/16(Mon) 10:24
投稿者しんじ
[OSのVer]:Windows2000    [VBのVer]:VB.NET 2002

お世話になっております。
VB.Netにてコンボボックスのクリックイベント時にデーターベースに接続して
格納するItemを常に最新にのものにしたいのですが、コンボボックスが思うように動作してくれませ
ん。
DBからのItem格納は問題ないのですが、DropDownの部分にNumericUpDownコントロールのような矢印が
表示されます。データーベースから取得したデータをItemに格納した後にDropDown部分を表示したく
色々施行錯誤しているのですが解決できません。
申し訳御座いませんがヒントだけでも結構ですのでご教授の程よろしくお願い致します。

ComboboxのDropDownStyleは「DropDownList」に設定しています。

コードの流れは

<ご参考>
ComboBoxクリックイベント内に

Combobox1.DroppedDown = False  'DropDown部分の表示をしない
Doevents
Combobox1.Clear

'ここにデーターベースからデータを取得し、Itemに格納するコードを記載しています。

Combobox1.DroppedDown = True  'DropDown部分を表示
Doevents

この他にも色々やってはいますが、どのようにやってもうまくいきません。

流れを纏めると

Item格納までDropDown部分を表示させずに待機し、Item格納後にDropDown部分を表示する。
また、ユーザーが選択しにくいのでNumericUpDownコントロールのような矢印は表示させたくありませ
ん。 

お手数お掛け致しますがご教授の程よろしくお願い申し上げます。
 

[ツリー表示へ]
タイトルRe: コンボボックスのクリックイベントでのDB接続について
記事No716
投稿日: 2004/02/16(Mon) 14:33
投稿者NAO★
MaxDropDownItems プロパティが 1 とかになっていませんか?

[ツリー表示へ]
タイトルRe^2: コンボボックスのクリックイベントでのDB接続について
記事No718
投稿日: 2004/02/16(Mon) 17:54
投稿者しんじ
> MaxDropDownItems プロパティが 1 とかになっていませんか?

お返事有難う御座います。
MaxDropDownItems プロパティは8になっています。

コンボボックスの動作を目視で観察すると

コンボボックスをマウスでクリック(MouseDown)した時点でDropDownListが表示されています。
クリックイベント自体は、MouseUpした時点で発生しています。

動作的には
MouseDown時に「空のDropDownList」が表示
MouseUp時に「データーベース接続後、Itemが表示」されるといった流れになります。
DBとのコネクションに時間がかかっているらしく、2回目の表示からは正常に8個アイテムが表示されま
す。
(多分プールした接続が残っているので実行速度が速くなっていると思われます)

今記載していてふと思ったのですが、MouseDownイベントとMouseUpイベントを組み合わせれば
何とかできないかな?と思ってみたりしました。
本末転倒で申し訳御座いません。

一回試してみて成功しても、不成功でもご報告させていただきます。

[ツリー表示へ]
タイトルRe^3: コンボボックスのクリックイベントでのDB接続について
記事No720
投稿日: 2004/02/16(Mon) 19:10
投稿者NAO★
> DBとのコネクションに時間がかかっているらしく、2回目の表示からは正常に8個アイテムが表示さ
れま
す。

コンボボックスをクリックした時にデータベースを読みに行くと
件数によってはタイムラグが気になると思います。

なにか他のコントロールで選択した結果でコンボボックスの内容が
かわるのでしたら、その元となるコントロールのイベントにデータベースを読みにいく
処理をさせた方が良いかと思われます。

' たとえばコンボ1を選択した結果でコンボ2の内容を変える
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, _
          ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged

    ComboBox2.Clear()

    ' データベースを読みに行く処理

    ' ComboBox2に追加
    ComboBox2.items.add(ResultData)
End Sub

[ツリー表示へ]
タイトルRe^4: コンボボックスのクリックイベントでのDB接続について
記事No721
投稿日: 2004/02/16(Mon) 21:29
投稿者しんじ
NAOさん

有難う御座います。
スレッド止めたりして色々試行錯誤した結果「遅い処理」には対応出来たのですが
今度は早い処理の時にコンボボックスがビビッたりして全然使えません。笑

> コンボボックスをクリックした時にデータベースを読みに行くと
> 件数によってはタイムラグが気になると思います。

本当にこの通りだと思います。
現状はコンボをクリックするタイミングで読みに行くのが良いと思われるのですが、
ご教授頂いた様に別のイベントから発生するようにインターフェースに工夫をしてみようと思います。
(制御出来そうな気もするのですが、制御コードだけで莫大になりそうな予感がします。)
貴重なお時間を割いていただきまして本当に有難う御座います。
助かりました。^^

[ツリー表示へ]