- PR -

TabControl上のComboBoxについて

1
投稿者投稿内容
nabe
会議室デビュー日: 2004/12/24
投稿数: 3
投稿日時: 2004-12-24 16:17
VB.NETを使用した初のプログラミングで困ってます。
TabControl上にComboBoxを置き、初期状態としてSelectedIndex に -1 を
セットしているのですが、タブを切り替えると勝手にSelectedIndex = 0
の状態になってしまいます。
ソースを書くと、こんな感じです。

'TabPage1上のComboBox
DataAdapter1.Fill(DataSet1, "MEISYO")
Me.ComboBox1.DataSource = DataSet1.MEISYO
Me.ComboBox1.DisplayMember = "項目名称"
Me.ComboBox1.SelectedIndex = -1

'TabPage2上のComboBox
DataAdapter2.Fill(DataSet2, "MEISYO")
Me.ComboBox2.DataSource = DataSet2.MEISYO
Me.ComboBox2.DisplayMember = "項目名称"
Me.ComboBox2.SelectedIndex = -1


いろいろと試したところ、.Items.Addを使えばこの現象は起きなくなりましたが、
それだとデータの参照、登録等にかなりの量のコードを追加しなければならず、
そもそもコントロールの数が多いためにTabControlを使用しているわけで、
できればこの方法は避けたいです。

'TabPage3上のComboBox これだとSelectedIndex = -1の状態を保てる
For i = 0 To DataSet3.Tables("MEISYO").Rows.Count - 1
Me.ComboBox3.Items.Add(DataSet3.Tables("MEISYO").Rows(i).Item(0))
Next


解決方法の1つに、DataSetの先頭に空白行を追加するという方法があると思いますが、
これは最後の手段として保留しておきたいなぁと考えています。
(今作成しているシステムでTabControlを使用しているフォームはここだけで、
TabControlのために今まで作った全てのソースを修正するのはちょっと…^^;;)


怪しいのはBindingContextのPositionとかCurrencyManagerあたりかなと
踏んでいるんですが、この辺りはまだ勉強不足でいい案が思いつきません。
一人で悠長に考える時間ももったいなく、皆様のお知恵をお借りできればと思っています。
よろしくお願いします。
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-12-24 18:21
タブを切替える都度初期状態に設定するのであれば、
TabControlのSelectedIndexChangedイベントで
ComboBoxのSelectedIndex に -1 を設定する方法もありますが、

外していたら無視して下さい。

いずれにしても、どの様にされたいのか、
もう少しはっきりされた方が回答もで易いかと思います。
nabe
会議室デビュー日: 2004/12/24
投稿数: 3
投稿日時: 2004-12-24 19:56
>Os_様

ご返答ありがとうございます。
言われてみればどうしたいかが書かれていませんね。
失礼しました。

結局やりたいこととしては、ユーザがComboBoxの内容を選択するまでは
未選択の状態を保持したいのです。
ComboBoxに表示されるデータは必須項目ではないのですが未選択を推奨するわけでもなく。
最終的には何がしかのデータが選択されるわけですが、ユーザさんは小出しで登録することがあるらしく、それまでは未選択状態でもデータ登録を可能にしたいのです。

したがいましてDataSetの先頭に空白行を追加するという方法はドンピシャ正解ではあるんですが、私のわがままから他に方法はないものかと。

SelectedIndex=-1の状態を保持しようという考え方がそもそもズレてるんでしょうか?
VB6まではこのやり方でやってきたし、VB.NETもTabControlさえクリアすれば
この方法で問題ないのですが。
よろしくお願いします。
Os_
ベテラン
会議室デビュー日: 2003/04/16
投稿数: 77
投稿日時: 2004-12-25 07:57
対応として考えられるのは、

1.単純データ連結する。
 これにより、ComboBox表示時に、データベースの値の項目が表示されます。
 値が未設定(DBNull.Value)の場合は表示なしです。

2.個別にTabControlのSelectedIndexChangedイベントで表示項目を設定する。
 ComboBoxの選択内容をそのイベント内で個別に行っている場合、
 TabControlのSelectedIndexChangedイベント内で、登録されている値を
 ComboBoxに設定する。この時、未設定の場合SelectedIndex=-1を設定する。

 
nabe
会議室デビュー日: 2004/12/24
投稿数: 3
投稿日時: 2004-12-28 10:10
>Os_様

返事が遅くなってしまい申し訳ありません。
年末ドタバタと忙しくなかなか検証する時間が取れなかったのですが、
今検証できました。
1の方法で問題ないようです。
とても助かりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)