次のコードを検討してください。これは、私が作成したユーザー コントロール内に実装したプロセスを簡略化したものです。
//MyUserControl Constructor
public MyUserControl(field, value)
{
InitializeComponents();
string cType = resolveControlType(field);
switch (cType)
{
...
case "ComboBox": AddComboBox(field, value);
...
}
}
AddComboBox(string fieldID, object value)
{
ComboBox cbo = new ComboBox();
cbo.DisplayMember = "DisplayMember";
cbo.ValueMember = "ValueMember";
//We set the DataSource to a DataTable
cbo.DataSource = DBCaller.GetListAsDataTable(fieldID);
this.Controls.Add(cbo);
cbo.SelectedValue = value; //<-- Weird stuff happening here?!
// If you don't break here, it
// doesn't look like the correct
// record is selected.
// However, add a breakpoint,
// scroll through cbo's properties
// and this assignment will work
// properly when you continue?!
}
私の問題は、値をコントロールに割り当てると、ComboBox のテキストに DataSource テーブルの最初の項目が表示されることです。
ただし、cbo.SelectedValue = value;
行にブレークポイントを設定し、Intellisense を使用して ComboBox に関連付けられたプロパティをスクロールすると、ComboBox で何かが初期化され、この問題が修正されます。コードの実行を続けると、ComboBox に表示された適切な値でフォームが読み込まれます。
何が起こっていますか?どうすれば修正できますか?