web-dev-qa-db-ja.com

DropDownListスタイルのC#ComboBox、テキストを設定するにはどうすればよいですか?

DropDownListスタイル(値を入力できないようにボタンのように見えるスタイル)のComboBoxを使用して、テキストボックスに値を挿入します。コンボボックスに「ワイルドカード」というテキストラベルを付けたいのですが、リストからワイルドカードを選択すると、選択した値がテキストボックスに挿入され、コンボボックスのテキストは「ワイルドカード」のままです。最初の問題は、コンボボックスがDropDownListスタイルのときにテキスト値を設定できないようです。プロパティパレットを使用しても機能しないテキスト値は、オフにするとオフになり、comboBox.Text = "Wildcards";が追加されます。 form_loadも機能しません。誰か助けてもらえますか?

19
James May

指定するコード:

comboBox.Text = "Wildcards";

...うまくいくはずです。そうしない唯一の理由は、指定したテキストがcomboBoxの項目リスト内の項目ではないことです。 DropDownListスタイルを使用する場合、Textには、リストに実際に表示される値のみを設定できます。

テキストをワイルドカードに設定しようとしていて、その項目がリストに表示されておらず、別の解決策が受け入れられない場合は、コードを少し汚くして一時的に項目を追加する必要があるかもしれませんドロップダウンリストが展開されると削除されます。

たとえば、いくつかのアイテムを含む「comboBox1」という名前のコンボボックスと「button1」という名前のボタンを含むフォームがある場合、次のようにすることができます。

private void button1_Click(object sender, EventArgs e)
{
    if (!comboBox1.Items.Contains("Wildcards"))
    {
        comboBox1.Items.Add("Wildcards");
    }

    comboBox1.Text = "Wildcards";
}

private void comboBox1_DropDown(object sender, EventArgs e)
{
    if (comboBox1.Items.Contains("Wildcards"))
        comboBox1.Items.Remove("Wildcards");
}

これはかなり速くて汚いですが、DropDownClosedイベントもキャプチャすることで、少しクリーンアップして、必要に応じて「ワイルドカード」アイテムを追加できます。

33
BlackWasp

Formloadまたはフォームコンストラクターでアイテムの1つを選択できます。

public MyForm()
{
    InitializeComponent();

    comboBox.SelectedIndex = 0;
}

または

private void MyForm_Load(object sender, EventArgs e)
{
    comboBox.SelectedIndex = 0;
}
4
Roman Bukin