DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Comboboxについて

環境/言語:[VB.NET]
分類:[.NET]

いつも参考にさせて頂いています。

コンボボックスについて教えてください。
たとえば以下の表があるとします。
引数     表示値
--------------------------------
1       日本
2       アメリカ
3       オーストラリア

コンボボックスの表示としては日本、アメリカ、オーストラリアを
表示したいのですが、SelectしたItemにたいして1.2.3を返してくれる
ように作ることは不可能ですか?

プログラム内で変換テーブルを持たないとだめでしょうか??
  • 題名: Re[1]: Comboboxについて
  • 著者: java.lang.Nullpo
  • 日時: 2004/08/25 11:46:00
  • ID: 5791
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
2004/08/25(Wed) 13:15:27 編集(投稿者)

■No5790に返信(ロンドンさんの記事)
> いつも参考にさせて頂いています。
>
> コンボボックスについて教えてください。
> たとえば以下の表があるとします。
> 引数     表示値
> --------------------------------
> 1       日本
> 2       アメリカ
> 3       オーストラリア
>
> コンボボックスの表示としては日本、アメリカ、オーストラリアを
> 表示したいのですが、SelectしたItemにたいして1.2.3を返してくれる
> ように作ることは不可能ですか?
>
> プログラム内で変換テーブルを持たないとだめでしょうか??

Items(index)はObject型ですので、自分で構造体でも作ってそれごとAddItemすれば取得できますよ。
(ちなみにクラスでも可能です)

  ' ComboBoxのItem専用
  Public Structure StructItem
    Public iIndex As Integer
    Public nName As String

    ’標準で出力(画面に表示)するメンバを、ToString()メソッドをオーバーライドして返す必要があります。
    Public Overrides Function ToString() As String
      Return Name
    End Function
  End Structure


■追記

そういえばVB6の時は、ItemIndexとListIndexと別れていましたね。
.NETで全く同じようにするためには、コレクションプロパティを追加したカスタムコントロールを自作してください。
1度作れば、汎用性の聞くComboBoxが出来上がりますが、結構面倒です。
標準コントロールに拘らなければ、カスタムコントロールでやった方がいいのかなぁ...
きいぼーです。

ロンドンさん
> コンボボックスについて教えてください。
> たとえば以下の表があるとします。
> 引数     表示値
> --------------------------------
> 1       日本
> 2       アメリカ
> 3       オーストラリア
>
DataTableを作成し、ComboBoxのデータソースに割り付けるといいと思います。
例のようなデータを持つDataTable(tb)を作成

ComboBox1.DataSource = tb
ComboBox1.ValueMember = "Col1"
ComboBox1.DisplayMember = "Col2"

とすると、Col2が表示されます。
値を参照するばあいは、ComboBox1.SelectedValue
を参照すると、選ばれている行のCol1の情報が取得できます。
ロンドンです。

java.lang.Nullpoさん、きいぼーさんお返事ありがとうございます。

今回はきいぼーさんの意見を参考にして作ってみます。
ありがとうございました。
解決済み!
ロンドンです。

一度解決済みにしたのですが、DataTableの作成をGoogle等で
調べたのですがなかなか見つかりません。

今、ツールボックスからDatasetを作成し、
型指定のないデータセットを選択。
プロパティでTablesにテーブルを1つ追加。名前はContb
ContbのカラムにConcodeとvalueを追加しています。

これに
世界中(でもないですが)の国と対応するコード(国番号とかではなく)
を作成時に入れておきたいのですが、どうすればいいでしょうか??

プロパティから入れられればいいのですが、今のところその方法を見つけることが
できません。

外部ファイルでもつか、スクリプト内で入れていくしかないのでしょうか?
きいぼーです。
データテーブルに取り込むのに簡単なのは、
XMLファイルから読み込む方法だと思います。
まず以下の無い様のXMLを準備します。(ここではInit.XMLとして保存します)
------------------------------------------------
<?xml version="1.0" standalone="yes" ?>
<NewDataSet xmlns="http://tempuri.org/Init.xsd">
<Contb>
<Concode>1</Concode>
<Value>日本</Value>
</Contb>
<Contb>
<Concode>2</Concode>
<Value>アメリカ</Value>
</Contbsg>
<Contb>
<Concode>3</Concode>
<Value>オーストラリア</Value>
</Contb>
</NewDataSet>
------------------------------------------------

読み込み時
Dim DS As New DataSet()
DS.ReadXml("Init.xml")

これで、DSに "Contb"テーブルが作成されています。

Dim DB_Tb As DataTable = DS.Tables("Contb")

でテーブルも参照できます。
ロンドンです。
ありがとうございます。
早速ですが、試してみました。

上記のXMLファイルを保存し、
フォームのLoad()に

  Dim DS As New DataSet
  DS.ReadXml("Init.xml")
  ComboBox1.DataSource = DS.Tables("Contb")
  ComboBox1.ValueMember = "Concode"
  ComboBox1.DisplayMember = "Value"

と記述しました。がコンボボックスには何も表示されませんでした。
同様にDataGridを作成し、
 DataGrid1.DataSource = DS.Tables("Contb")
 としたときにはデータが表示されました。

 DataSourceの設定まではうまく行ってると思うので、
 ValueMemberとDisplayMemberの設定が間違ってるのでしょうか。
きいぼーです。
ロンドンさん
>  DataSourceの設定まではうまく行ってると思うので、
>  ValueMemberとDisplayMemberの設定が間違ってるのでしょうか。
同様にこちらの環境では表示されています。
DataGridに表示された際、
カラムの表示はどうなっていますか?

※ 昨日貼り付けたXMLではカラムが間違っていました、すみません。
ロンドンさん、きいぼーさん
こんにちわ。

横からすいません。XMLの仕様の話ですが・・・

<Contb>
<Concode>2</Concode>
<Value>アメリカ</Value>
</Contbsg>

開始タグと終了タグはあってないといけません。
それと、大文字、小文字は区別されるので、
CONCODE、とConcodeは別ものになります。

あとは、書いたXML文書がXMLとして正しいか、
IEなどのブラウザで見てみると良いと思います。

日本語などの文字がある場合、
エンコードの指定をしないと見れないと思いますが・・
  • 題名: Re[8]: Comboboxについて
  • 著者: ロンドン
  • 日時: 2004/08/26 14:00:40
  • ID: 5821
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
SHさん、きいぼーさんこんにちは。ロンドンです。

> ※ 昨日貼り付けたXMLではカラムが間違っていました、すみません。
いえいえ、こちらで気づく事が出来ましたので訂正してファイルに保存しました。

> DataGridに表示された際、
> カラムの表示はどうなっていますか?
カラムの表示はConcodeとValueになっていました。

しかしながら、今見たところ、今度は正常に表示されていました。
ん〜いったいさっきはなぜ表示されていなかったのか・・・。
ちょっとわかりませんが、もうすこし確認してみたいと思います。

これでやりたいことは出来そうなので解決とさせていただきます。

SHさん、きいぼーさん、java.lang.Nullpoさんありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板