web-dev-qa-db-ja.com

データバインドされたComboBoxを削除/空白にする方法は? SelectedIndex = -1は機能しません

Windowsフォームアプリケーションでいくつかのコンボボックスの選択を解除(空白)しようとしています。私のアプリケーションには、各コンボのSelectedIndexを-1に設定するResetメソッドがあります。私のコンボボックスはすべてデータバインドされています。つまり、各コンボボックスはデータソースを使用して入力されます。

リセット方法が機能する場合があることに気付きました。つまり、現在選択されているアイテムの選択を解除し、コンボを空白にします。ただし、-1に設定しようとした直後に、最初の項目(SelectedIndex = 0)を選択する場合もあります。ユーザーの観点からは、フォームが常に「クリア」されるとは限らないため、これはバグのように見えます。

MSDNによると:

「現在選択されているアイテムの選択を解除するには、SelectedIndexを-1に設定します。アイテムがデータバインドアイテムの場合、ComboBoxアイテムのSelectedIndexを-1に設定することはできません。」

誰かが回避策を知っていますか?

どうもありがとう

9
bobbo

ボイドとプロパティの組み合わせを使用する

comboBox.ResetText();

 //to reset selected value
comboBox.SelectedIndex = -1;
20
Hisham

5年後の今なので、まだ誰かがこれに興味を持っているかどうかはわかりませんが、非常に簡単な回避策を見つけました。完全に直感的ではありませんが(参照ソースコードを見るだけでわかりました)、実装は簡単です。

ComboBox1.FormattingEnabled = True;

うん、それだけです!

興味がある場合は、 ソースコード をよく読んで何が起こっているかを確認できます。 @CuppMによって指摘されたバグの根本的な原因は、データソース内の位置を設定しようとしたことであるようです。

if (!FormattingEnabled || SelectedIndex != -1) {
    this.DataManager.Position = this.SelectedIndex;
} 

'||'ではなく '&&'にすべきだったと思いますFormattingEnabledプロパティに関係なく、コードがPositionを無効な値に設定してはならないためです。

いずれにせよ、それは簡単な回避策を可能にします。また、「Format」プロパティが空白の場合のデフォルトの動作は何もしないため、他に何も変更する必要はありません。それはうまくいきます。 :-)

(これは.NET 4.7でのみ試したので、以前のバージョンの.NET Frameworkで機能するかどうかはわかりません。)

4
The Mad Coder

選択した値またはアイテムをnull(VBではNothing)に設定してみてください。

例外をスローする動作を思い出せません。ただし、通常はdatabindイベントを介してデータバインドされた後、-1(なし)という値をコンボボックスに挿入していたことを覚えています。リスト内のデータを取得し、このリストに新しい値を挿入することをお勧めします。今すぐコンボをリストにバインドします。

2
Hassan Gulzar

次のコードのみが機能するので、試してみてください。

comboBox.ResetText();   //framework  4.0 
1
esc

ComboBox1.SelectedItem = null;

1
Dil Shad

null プロパティにSelectedValueまたはString.Emptyを割り当ててみてください。

0
RePierre

私はしばらくの間この問題を抱えていましたが、あなたが使用する場合:

'ComboBox.ResetText();'

テキスト「」が作成され、コンボボックス内のアイテムは影響を受けません。

アプリケーションで次のコードを使用しました

 private void UpdateComboBox(ComboBox Box, string Group, List<string> Numbers)
        {
              Box.Items.Clear();
              Box.BeginUpdate();            
              Box.Items.Add("<<Add Contact>>");
              foreach (string item in Numbers)
              {
                   if(item != "")
                        Box.Items.Add(item);
              }
          Box.EndUpdate();
          Box.ResetText();
        }

したがって、すべてのアイテムがコンボボックスに入ったら、最後にメソッドを実行します。

0
Jukes

ターゲットフレームワークが4.0の場合、解決策は次のとおりです。

.Net Framework 4.5をインストールします(プロジェクトのターゲットフレームワークを変更せず、フレームワークをインストールするだけです)。インストール後、その行はデータバインドされたコンボボックスの選択を解除します。

combobox.SelectedValue = 0;

私の値のメンバーは "Id" intプライマリキーの自動インクリメントであるため、フィールドには値0が含まれていません。ただし、.net45をサポートしていないWindowsバージョンでは機能しません。

0
blb

ComboBox.SelectedItemを-1に設定すると、「位置0に行がありません」というエラーが発生しました。 ComboBox.ResetText()による置換は問題なく機能しました。これは、ComboBoxesのデフォルトでTextFormatting = TrueであるVS2013で.Net4.6.1を使用していました。

0
SimonKravis

[ComboBoxObj] .SelectedIndex = -1;を設定してみてください。空の値になります。 -1は、コンボボックスの値の選択を解除または無効にすることを示します

ありがとう

0
privatejava