C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: C#読み取り専用リストの変更


(過去ログ 129 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■76696 / inTopicNo.1)  C#読み取り専用リストの変更
  
□投稿者/ わん (1回)-(2015/08/03(Mon) 22:06:26)

分類:[C#] 

コンボボックスの値を下記のDataListを使って表示させております。

現在使っている値は後々の分岐処理で使う("001"の場合XXXする、という使い方をしている)ため、
内部で値を保持したままコンボボックス上で表示される値のみ変えたいです。
Itemプロパティ等が使えるのかと思いましたが、どのように手を加えればよいか
分からないためお知恵を借りたく、よろしくお願いいたします。

--現在使用しているList

List <string> DataList = new List <string> {"001","002","003"}

--実現したいこと
現在使用している値は影響なく

[表示] [値]
東京   001
神奈川  002
千葉   003

引用返信 編集キー/
■76697 / inTopicNo.2)  Re[1]: C#読み取り専用リストの変更
□投稿者/ 魔界の仮面弁士 (431回)-(2015/08/04(Tue) 00:02:42)
No76696 (わん さん) に返信
> List <string> DataList = new List <string> {"001","002","003"}
> 現在使用している値は影響なく

影響なく、と言われても、現在どのように使用しているのかを教えて頂かないことには…(^^;

とりあえず、こんな感じで如何でしょうか?


Dictionary<string, string> dataList = new Dictionary<string, string>();

private void Form1_Load(object sender, EventArgs e)
{
  dataList.Add("001", "東京");
  dataList.Add("002", "神奈川");
  dataList.Add("003", "千葉");

  comboBox1.DataSource = dataList.ToArray();
  comboBox1.ValueMember = "Key";
  comboBox1.DisplayMember = "Value";

  comboBox1.SelectedIndex = 0;
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
  label1.Text = comboBox1.SelectedValue as string;
  label2.Text = comboBox1.Text as string;

  var pair = (KeyValuePair<string, string>)comboBox1.SelectedItem;
  label3.Text = pair.Key;
  label4.Text = pair.Value;

  label5.Text = comboBox1.GetItemText(pair);
}
引用返信 編集キー/
■76700 / inTopicNo.3)  Re[1]: C#読み取り専用リストの変更
□投稿者/ ぶなっぷ (38回)-(2015/08/04(Tue) 15:55:41)
私も魔界の仮面弁士さんの意見と同じです。
ただ、いきなりDictionaryを使った例だと難しいでしょうから、Listを使った例に
直してみますね。

    public class Data
    {
        public string Display { get; set; } // 表示
        public string Value   { get; set; } // 値
    }
    List<Data> DataList = new List<Data>();

    private void Form_Load(object sender, EventArgs e)
    {
        DataList.Add(new Data { Display = "東京",   Value = "001" });
        DataList.Add(new Data { Display = "神奈川", Value = "002" });
        DataList.Add(new Data { Display = "千葉",   Value = "003" });

        comboBox1.DataSource = DataList;
        comboBox1.DisplayMember = "Display";
        comboBox1.ValueMember = "Value";

        comboBox1.SelectedIndex = 0;
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        var SelectedData = comboBox1.SelectedItem as Data;
        if(SelectedData == null) return;

        label1.Text = SelectedData.Display;     // 選択された表示
        label2.Text = SelectedData.Value;       // 選択された値
    }

魔界の仮面弁士さんの例ではDictionaryなので、
上記例の Data.Display が KeyValuePair.Value,
         Data.Value が KeyValuePair.Key
になります。

Dictionary は KeyValuePairクラスを要素とするコレクションで、
KeyValuePairクラスには、プロパティのKey,Valueがあります。
これで伝わるかな?

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -