質問: s;が 反映されません。 何卒よろしくお願いいたします。
回答: こちら DataSourceバインドしたらSelectedItemが を見ると出来ているようですので、 これ ComboBox(Forms) の DataSource を使用するときの注意点 とかが問題なのかもしれません。 > > ComboBox.DataSource にデータソースをバインドするときに DisplayMemer, > > ValueMemberを事前に設定しておかないと、 SelectedIndexChanged イベントを > > サブスクライブしていると痛い目を見ます。DisplayMember, ValueMember を > > セットする前に DataSource にバインドすると、 SelectedIndexChanged イベントが > > 起動されて ComboBox.SelectedValue の値が想定した値(ValueMember) ではなく、 > > バインドしている現在選択されているオブジェクトそのものになってしまいます。 > > > 上記に従って以下の部分を ``` //コンボボックスのDataSourceにDataTableを割り当てる this.DataSource = this.tbl; //表示される値はDataTableのNAME列 this.DisplayMember = "NAME"; //対応する値はDataTableのID列 this.ValueMember = "ID"; ``` こちらのように変えて試してみてください。 ``` //表示される値はDataTableのNAME列 this.DisplayMember = "NAME"; //対応する値はDataTableのID列 this.ValueMember = "ID"; //コンボボックスのDataSourceにDataTableを割り当てる this.DataSource = this.tbl; ``` 追記 済みません。良く見直したらComboBoxの派生クラスを作成していたんですね。 以下のような感じで同じプロジェクトの中で派生クラスをFormに組み込んでみたら、 特に変なことも不要で、(object)でキャストすることでSelectedValueを変更出来ています。 参考にしてください。 Form1.Designer.cs:(Formへの組み込み結果["WindowsFormsApp1"がプロジェクト名]) ``` private void InitializeComponent() { // ~途中省略~ this.uCombo1 = new WindowsFormsApp1.UCombo(); // ~途中省略~ // // uCombo1 // this.uCombo1.DisplayMember = "NAME"; this.uCombo1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.uCombo1.FormattingEnabled = true; this.uCombo1.Location = new System.Drawing.Point(12, 272); this.uCombo1.Name = "uCombo1"; this.uCombo1.Size = new System.Drawing.Size(160, 20); this.uCombo1.TabIndex = 8; this.uCombo1.ValueMember = "ID"; // ~途中省略~ this.Controls.Add(this.uCombo1); // ~途中省略~ } // ~途中省略~ private UCombo uCombo1; ``` Form1.cs:(データの挿入と選択値取得&変更) ``` public partial class Form1 : Form { // データの挿入 private void button1_Click(object sender, EventArgs e) { uCombo1.add("Value01", "DisplayText01"); uCombo1.add("Value02", "DisplayText02"); uCombo1.add("Value03", "DisplayText03"); uCombo1.add("Value04", "DisplayText04"); uCombo1.add("Value05", "DisplayText05"); uCombo1.add("Value06", "DisplayText06"); uCombo1.add("Value07", "DisplayText07"); uCombo1.add("Value08", "DisplayText08"); } // 選択値取得 private void button2_Click(object sender, EventArgs e) { string str = uCombo1.SelectedValue.ToString(); // ~取得した値の表示処理:省略~ } // 選択値変更 private void button3_Click(object sender, EventArgs e) { uCombo1.SelectedValue = (object)"Value08"; } } ```