- - PR -
複数の値をもたせたコンボボックスでコードより値を選択する方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-15 15:08
WINDOWSフォーム VB.NETで作成しています。(2003です)
コンボボックスに複数の値を持たせる際 データの追加、取得はできるのですが、 コンボボックスの値をコードより選択する方法がわかりません。
ちなみにMyListはここを参考にクラスを作っています。 http://support.microsoft.com/default.aspx?scid=kb;ja;311340
コンボボックスの値は ComboBox1.SelectedItem.Name ComboBox1.SelectedItem.ItemData で取得できるのですが コンボボックスの値を選択する時 コードを指定して選択したいのですが ComboBox1.SelectedValue = "選択したいコード" ComboBox1.SelectedItem.ItemData = "選択したいコード" と、ほかにも数パターン適当に試してみたのですが どうやって指定するかわかりません。 単純なことかもしれませんが 指定方法をご教授願いませんでしょうか また設定の間違いがあればご指摘ください。 | ||||||||
|
投稿日時: 2004-09-15 15:26
どうもです。すいません、コードはしんどくて全部見てませんが・・。
コンボボックスで選択したい値を設定するにはSelectedIndexプロパティを使用します。 Combobox1.SelectedIndex = 1 と言う風にです。 ComboBox1.Items.Add(New MyList(NAME, CD)) だとIndexが自動的に設定されますのでIndexを指定するときに分かりにくいと思います。 ComboBox1.Items.Insert(index, item) と言う風にIndexを指定して項目を追加して選択時にSelectedIndexでIndexを指定します。 では。 | ||||||||
|
投稿日時: 2004-09-15 16:01
とっと様早速の返答ありがとうございます。
すこし説明不足だったことをお詫びします。
説明がわかり難くてすいません。 SelectedIndexと、ここで入力するコードといっているものは 等しくないものとして考えていました。 コードが今回Integerになっていたので申し訳ないのですが コードはString型でも考えてもらえるとわかりやすいかと思います。 つまり ComboBox1.Items.Add(New MyList("AAA", "CD001")) ComboBox1.Items.Add(New MyList("BBB", "CD002")) ComboBox1.Items.Add(New MyList("CCC", "CD003")) ComboBox1.Items.Add(New MyList("DDD", "CD004")) とデータを入れておき "CD004"を選択したい場合(この場合表示されるは"DDD"ということになります) どのように指定すればいいのかという所です。 Combobox1.SelectedIndex = XXX だと、とっとさんの仰るとおりIndexがわかっていません。 Combobox1.SelectedValue = "CD004" でもだめなようです。 参考にしたURLでもこの作り方を行い、 コンボボックスのデータを取得する方法は記述されていたのですが 逆に選択するほうは書かれていませんでした。 選択方法、または別のコンボボックスの設定方法でも構いません ご存知の方がおられましたら、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2004-09-15 16:13
[quote]
PoHさんの書き込み (2004-09-15 16:01) より: とっと様早速の返答ありがとうございます。 [quote] ドキュメント作成ばかりで気分転換もかねてです^^ 例えば、Combobox1.text = XXXXX で指定するのはダメですか? 僕は予め値が設定されたコンボボックスのtextプロパティを設定してSelectedIndexChangedイベントを発生させたりしていますが・・・。 | ||||||||
|
投稿日時: 2004-09-15 16:58
とっと様、何度もありがとうございます^^
この場合 Combobox1.text = "DDD" を行うと、期待通り"CD004"(コンボボックスの表示は"DDD") を選択してくれています。 今回は"CD004"のコード(Value)のほうで指定したいので。 Combobox1.text = "CD004" ではだめなようです。 Combobox1.Value = "CD004" ってのはないみたいで^^; どうもWEBフォームとごっちゃになっていけません。 たぶん単純なところでつまずいているのかともおもいつつ 解決策が見当たっておりません。 どなたか方法、ご指摘等ありましたら ご指導おねがいいたします。 | ||||||||
|
投稿日時: 2004-09-15 18:24
このクラスのインスタンスをArrayListに格納して、ComboBox.DataSourceに設定。DisplayItemとValueItemプロパティを、それぞれ"Name"と"ItemData"に設定。 例は、MSDN(VS.NET2003のヘルプ)の、ListControlの項目にあります。 | ||||||||
|
投稿日時: 2004-09-15 18:25
どうもです。参照されたマイクロソフトのサイトを拝見しました。
元々VB6ではコンボボックスにItemDataプロパティがあってインデックスとは別にキーになるコードを持たせることが出来ました。例えばあるマスターテーブルの内容をコンボボックスに格納する時にそのテーブルのキーになるフィールドの値を格納してた訳です。 .netではItemDataプロパティがなくなったのでVB6から.netに変換するときの回避策として参照された例のような回避策がなされたのでしょうね。 たとえばデータ元のDataTableをループさせていいのであればご希望は叶いそうですが、そうでなければコードが"CD004"のように連続した規則性のあるものであれば数値の部分を数値型に変換してSelectedIndexに対応させるとかですかねー。 VB6の時代でも結局ItemDataを元にIndexを求めて指定していましたから^^ | ||||||||
|
投稿日時: 2004-09-16 09:55
Jitta様、とっと様返答ありがとうございました。
DataSourceに配列の変数をいれる方法で解決いたしました^^ ちなみにこの場合値をとる時は .SelectedValue・・・(CD)と.SelectedText・・・(NAME)ではなく .SelectedValue・・・(CD)と.Text・・・(NAME)なんですねぇ 一応、今後過去ログ検索の為、対応したコード書いて このスレを締めさせていただきます。 ありがとうございました
[ メッセージ編集済み 編集者: PoH 編集日時 2004-09-16 09:57 ] |
1