免責事項 - 私は C# を使用してまだ 1 週間ほどしか経っていないので、これが些細な質問ではないことを願っています。私は周りを見回しましたが、このスレッドの結果を含め、機能する解決策を見つけることができませんでした.
Windows フォームにコンボボックスがあります。コンボボックスのデータは、Access データベースから取り込まれます。私が設定した関連プロパティは次のとおりです - AutoCompleteMode = Append; AutoCompleteSource = ListItems; ドロップダウンスタイル = ドロップダウン. ユーザーはコンボボックスに入力でき、オートコンプリートできる必要があるため、DropDownList の DropDownStyle は機能しません。デフォルトのドロップダウン矢印を使用する代わりに、動的な PictureBox を使用しています。PictureBox をクリックするか、Enter イベントをトリガーすると、コンボボックスの DropDowned プロパティが true に設定されます。
現在のように、ユーザーはアイテムを問題なく選択するか、アイテムを入力してEnterキーを押すか、アイテムを入力してフィールドを離れることができます....これらのさまざまなタイプの対話のすべての間に、正しい値が何であるかを判断できますコンボボックスは。SelectedValue と表示されたテキストが常に同期していることを確認するための特定のトリガーがあります。
1つを除いて、考えられるすべての相互作用で正しい値を取得できます。ユーザーが文字列の入力を開始し (DropDowned プロパティ = true)、右矢印キーを押して文字列をオートコンプリートすると、コンボボックス内の文字列は常に null 文字列になります。
ビジュアル:
選択済み_テキスト
上記の文字列の太字のテキストは、コンボボックスで強調表示されたテキストです。ユーザーが右矢印キーを押して、コンボボックス内のテキストを次のようにすると、
Selected_Text
(この時点で DropDowned はまだ true であることに注意してください) ComboBox.Text 値は常に "" です。
ユーザーが Enter キーを押すと最初にトリガーされる ComboBoxes の DropDownClosed イベントの 1 つのコードを次に示します。
private void cmbxYear_DropDownClosed(object sender, EventArgs e)
{
try
{
if (!cmbxYear.Text.Equals(cmbxYear.SelectedValue.ToString()))
{
if (!bUpdated & !bErrorFound)
{
validateData(cmbxYear, clrYear, false, imgFilter1, imgNoFilter1);
updateTable();
}
}
imgFilter1.Visible = false;
imgNoFilter1.Visible = true;
}
catch
{
imgNoFilter1.Visible = false;
imgFilter1.Visible = true;
}
}
また、ComboBox.Text は、DropDowned プロパティ = true で、ユーザーが何かを入力してから "Enter" を押すと、常に null 文字列になることも発見しました。これは、DropDowned プロパティ = false の場合には当てはまりません。その場合、正しい文字列が返されます。
プログラムにコモボックス内のすべてのテキストを選択させることさえ試みました。ただし、SelectionLength に ComboBox.Text.Length より大きい値を指定しても機能しないようです。SelectedValue も参照してみました。ただし、SelectedValue は null です。
すべての集中的な目的のために、アプリケーションはコンボボックスにヌル文字列があると確信しています。
実際の文字列を取得するにはどうすればよいですか?
これが役立つ場合に備えて、次のイベントのコードがあります: Click、DataSourceChanged、DropDown、DropDownClosed、Enter、KeyDown、Leave、および Validated。