4

hereComboBoxの特定のアイテムを無効にする簡単な解決策と思われるものを見つけました。それは述べています:

リスト ボックスまたはコンボ ボックスの項目を無効にするには、式の先頭に円記号を 1 つ追加します。

しかし、私が書くなら

testBox.Items.Add("\Test item");

また

testBox.Items.Add(\"Test item");

VS2010 で構文エラーが発生します。2005年以降のバージョンではこの機能が無効になっているのではないでしょうか?

このようにVS2010デザイナーにアイテムを渡すと

\Test item

または私が書く

testBox.Items.Add("\\Test item");

バックスラッシュ付きで表示され、無効にはなりません。

したがって、私の質問は次のとおりです。このメソッドは何らかの方法で利用できますか?それを使用する方法を理解できないだけですか?それとも、(タイトルで)目標を達成するためにカスタム ComboBox を作成する必要がありますか?

4

3 に答える 3

6

悲しいことに、コンボボックスコントロールでは不可能です。

アイテムを無効にするのではなく、コンボボックス リストからアイテムを削除することをお勧めします。

これらの 3 つの方法のいずれかで:

// To remove item with index 0:
comboBox1.Items.RemoveAt(0);
// To remove currently selected item:
comboBox1.Items.Remove(comboBox1.SelectedItem);
// To remove "Tokyo" item:
comboBox1.Items.Remove("Tokyo");

どうしてもアイテムを無効にする必要がある場合は、カスタム コンボボックスを作成する必要があります。

于 2012-09-05T11:38:58.107 に答える
3

更新 1: これは機能しませんが、以下のコメントが意味をなすようにそのままにしておきます。

更新 2: あなたの質問に答えるには...少しグーグルで調べた後、WinForms でこれを達成するための唯一のオプションは、あなたが提案したように独自のコントロールを作成することだと思います。

複数のバックスラッシュで始まるアイテムを操作するためのルールは、エスケープ シーケンスにも適用されるのではないかと思います。どうですか:

testBox.Items.Add("\]Test Item");

私はそれをテストすることはできませんが、うまくいくようです。

于 2012-09-05T11:37:24.637 に答える
0

一般に: と書いてバックスラッシュをエスケープする必要があります\\\Tそれ以外の場合、コンパイラはエスケープ シーケンス (存在しない) として解釈しようとします。デザイナーがすでにこれを行っていると思いますが、生成されたソース コードをいつでも確認できます ;)

コンボボックス項目の無効化について: リンクしたドキュメントは、ComboBox ではなく ListBox に適用されるようです。さらに、Windows.Forms ではなく、VisualFox Pro を指します。だから、これはうまくいかないと思います;)

このディスカッションによると、コントロールをサブクラス化し、そのペイント ハンドラーをオーバーライドする必要があります。

ただし、それを行う前に、無効にしたいアイテムを削除する (または追加しない) だけです。

于 2012-09-05T11:30:26.130 に答える