コンボボックスのデータソースを設定するプロジェクトがありますが、ユーザーはこのリストから何かを選択するか、リストに含まれていないアイテムを入力できます。基本的には、通りを含むジオバースがありますが、ユーザーはリストからストリートを選択する必要はありません。 ComboBox.DropDownStyleはDropDownに設定されています。コンボボックスがデータソースに結びついているときにコンボボックスを使用する
ジオバースに含まれていない通り(したがって、ComboBox.DataSourceに含まれていない)の道路を含むレコードを編集すると、フォームに正しく入力する問題が発生しています。ここで
は、我々の問題の非常に簡略化された形式である:ComboBoxTrialクラスは、このようなものになり
private void button1_Click(object sender, EventArgs e)
{
// Create a new form. In the constructor the DataSource of the ComboBox is set with three items:
// Main St., First St., and Second St.
ComboBoxTrialForm frm = new ComboBoxTrialForm();
// Set comboBox1.Text equal to an item NOT in the datasource
frm.SetComboTextValue("Michigan Ave.");
// Show the form, and the comboBox has the first item in its datasource selected
frm.Show();
}
:
public partial class ComboBoxTrialForm : Form
{
public ComboBoxTrialForm()
{
InitializeComponent();
List<string> streets = new List<string>() { "Main St.", "First St.", "Second St." };
comboBox1.DataSource = streets;
}
public void SetComboTextValue(string text)
{
comboBox1.Text = text;
}
}
を私はポイントを壊す設定し、comboBox1.Textが実際にセットされますないことがわかりました正しく興味深いことに、この簡単な例でBindingContextChangedイベントが実際に2回発生することがわかりました。 comboBox1.DataSource = streets
が呼び出されるとコンストラクタに1回、frm.Show()
が呼び出されると2回目です。
フォームが表示されているときにこのイベントが発生するのはなぜですか。手動で選択された選択が削除されるのはなぜですか。この行動を修正するにはどうすればよいですか?
また、私はこの方法でコンボボックスを使用できるはずがないと思っていますか?
ありがとうございます。
ありがとうブライアン。私はあなたが私の問題を検討し、解決策を提供するのにかかった時間を本当に感謝します。 [MSDN](http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.text.aspx)は、次のように説明しています。 "Textプロパティをコレクションにない値に設定すると、 SelectedIndexは変更されません。私は、コンボボックスの値をリストにない値に設定すると、selectedIndexは0のままになると思います。フォーム/コンボボックスが表示されているとき、現在のselectedIndexと等しい値を設定して、選択範囲を消去します。それは正しいと思いますか? –
また、BindingContextChangedイベントが2回発生する理由も考えられます。私はなぜそれが最初に発火するのか理解していますが、フォームが表示されたときになぜ再び発火するのか分かりません。 –