|
■No78852 (?}?e?B さん) に返信
上の私のレスで書いたことの具体例を書いておきます。
辞書(Dictionary<string, string> クラス)を作って使う場合の例。項目が増えた場合は
Dictionary メソッドだけ修正すれば OK です。さらに、外部のテキストファイル等から項
目を取得するようにすれば、コードはいじらなくても外部テキストファイルのみ修正すれば
OK です。
namespace WindowsFormsApplication
{
public partial class Form11 : Form
{
Dictionary<string, string> dictionary;
public Form11()
{
InitializeComponent();
this.comboBox2.SelectedIndexChanged += new EventHandler(comboBox2_SelectedIndexChanged);
}
private void Form11_Load(object sender, EventArgs e)
{
this.dictionary = CreateDictionary();
this.comboBox2.Items.AddRange(this.dictionary.Keys.ToArray());
this.comboBox2.SelectedIndex = 0;
}
// 辞書を作るためのヘルパメソッド
private Dictionary<string, string> CreateDictionary()
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
dictionary.Add("あ", "AAA");
dictionary.Add("い", "BBB");
dictionary.Add("う", "CCC");
dictionary.Add("え", "DDD");
// 以降必要な分を追加
return dictionary;
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.comboBox2.SelectedIndex != -1)
{
this.textBox2.Text = dictionary[((ComboBox)sender).SelectedItem.ToString()];
}
}
}
}
上記より、もし ValueMember に "AAA", "BBB", "CCC", "DDD"... を設定して良いなら、わ
ざわざ辞書を作る必要はなくなりますので、その方がスマートにできると思います。
さらに、上のレスにも書きましたが、元データがデータベースにあるような場合は、Visual
Studio のウィザードを使って 型付 DataSet/DataTable + TableAdapter を自動生成させて
それを使ったほうが簡単かもしれません。以下のような感じです。
namespace WindowsFormsApplication
{
public partial class Form11 : Form
{
NorthwindDataSet dataset;
NorthwindDataSetTableAdapters.CustomersTableAdapter tableAdaptor;
public Form11()
{
InitializeComponent();
this.dataset = new NorthwindDataSet();
this.tableAdaptor = new NorthwindDataSetTableAdapters.CustomersTableAdapter();
this.comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
}
private void Form11_Load(object sender, EventArgs e)
{
this.tableAdaptor.Fill(this.dataset.Customers);
// DataSource の設定は最後にすること。最初に持ってくると、DisplayMember、
// ValueMember の設定時に余計なデータバインドが起こる。
this.comboBox1.DisplayMember = "CustomerID";
this.comboBox1.ValueMember = "CompanyName";
this.comboBox1.DataSource = this.dataset.Customers;
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.comboBox1.SelectedIndex != -1)
{
this.textBox1.Text = ((ComboBox)sender).SelectedValue.ToString();
}
}
}
}
|