コンボボックスのテキストの選択を解除する方法

私はキーと値のペアのリストでデータをバインドするクリプトンコンボボックスを持っています。何が起こっているのは、選択した項目をコードで設定すると、テキストが強調表示されているということです。これを防止するか、テキストの選択を解除するにはどうすればよいですか?

私は以下を試した:

// 1
combo.Select(0,0);
// 2
combo.Focus();
anotherControl.Focus();
// 3
combo.SelectionStart = 0;
combo.SelectionLength = combo.Text.Length;
// 4 
combo.SelectionStart = combo.Text.Length;
combo.SelectionLength = 0;

何も動作していないようです。どんな助けもありがとうございます。

16
追加された 編集された
ビュー: 5

12 答え

私はこれを達成して、私のコントロール/ウィンドウのOnPaintイベントをオーバーライドし、

combobox1.SelectionLength = 0;
6
追加された
これを行うと、後でテキストを強調表示することはできません。 OnPaintメソッドが頻繁に呼び出されるたびに、その選択が解除されます。
追加された 著者 Martin Fernau,

私は動作する解決策を見つけたかもしれません:

フォームを使用している場合は、フォームの表示イベントを購読してください。

OR

私のようにUserControlを使用している場合は、VisibleChangedイベントを購読することができます。

この場合、次の操作を実行できます。

        foreach (ComboBox cbo in (this.Controls.Cast().Where(c => c is ComboBox).Select(c => (ComboBox) c)))
        {
            cbo.SelectionLength = 0;
        }

余談として:

私はコントロールにComboBoxを追加した後、後でそのサイズを動的に設定する必要があるユーザーコントロールでこれを行う必要がありました。サイズを設定すると、OPが遭遇していたハイライトが生じました。

3
追加された
これも私のために働いた。すばらしいです
追加された 著者 Martin Fernau,

これを試してみてください

combo.SelectedText = String.Empty;

フォーカスに関する問題について:( MSDN

コンボボックスのフォーカスが失われると、選択ポイントが   テキストの先頭と選択されたテキストは選択解除されます。

とても奇妙;なぜ以下がうまくいかなかったのか:

anotherControl.Focus(); 
2
追加された
働かないでください。たぶんこの答えは古いC#のためのものです。
追加された 著者 Gurebu Bokofu,
ありがとう、しかしうまくいかなかった
追加された 著者 MattBH,
それがロードされた後にそれをクリックして何か他のものをクリックすると、フォーカスのものが動作します。それは私のナッツを運転している
追加された 著者 MattBH,
バインドされていますが、リストから項目を選択します。これは基本的にはDBから事前に作成されているフォームなので、正しい項目を選択する必要があります。
追加された 著者 MattBH,
あなたのコンボボックスは、いくつかのデータソースにバインドされていますか?はいの場合は、SelectedIndex = -1を試してください
追加された 著者 sll,

私はこれがどれほど古いか気にしない。私たちは知識ベースを構築しています。

私はD5を使用しています(おそらく以前のバージョンは同じです)。あなたは以下を使用する必要があります:

Combobox.SelLength :=  0; 

また、それが動作しない場合、これはしません:デフォルトのスタイル(csDropDown)を避けてください。   それを次のように設定します:

Combobox.Style := csDropDownList; 

アレックスが提案したように。

ありがとうございました。よく働く!

1
追加された
D5?あなたはDelphiを意味しますか? [C#]タグ付きの質問ですか?
追加された 著者 jean,
あなたがここに示した構文はC#のようには見えません。
追加された 著者 kayess,

ここに私がしていることがあります:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
     this.ActiveControl = cancelButton;
}
0
追加された
this.ActiveControl = null; も機能します。
追加された 著者 Alden,

SelectedIndexChangedイベントでは、10ミリ秒後に1回だけ実行されるタイマーを追加します。

new System.Threading.Timer((s) =>
            {
                comboBox1.Invoke(new Action(() =>
                {
                    comboBox1.Select(0, 0);
                }));
            }, null, 10, System.Threading.Timeout.Infinite);
0
追加された

私はこの質問をしてからしばらくしていることを知っています。しかしここにあなたができることがあります

combo.selectedindex = -1;
0
追加された
ありがとう、しかし、私は選択項目を変更しようとしていない、私はちょうどテキストを強調表示したい。
追加された 著者 MattBH,

ユーザーがComboBoxの値を編集できるかどうかは指定していません。そうでない場合は、ComboBoxの DropDownStyleComboBoxStyle.DropDownList に設定する必要があります。この方法では、ComboBoxは既存の値の選択のみを許可します。ユーザーは新しい値を入力することができず、テキストは決して強調表示されません。

0
追加された

これらの3行は私を助けました:

cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;

TabIndexは最初のものでなければならないので、フォームの最初の項目ではありません

0
追加された
私はOPと同じ問題を抱えていて、これは役に立たなかった
追加された 著者 Martin Fernau,

あなたがバックグラウンド、すなわち発砲したイベントなどで何をしているのかは分かりませんが、combox selectedindexchangedイベントではanotherControl.Select()を追加できます。

それは:)

0
追加された
いいえ動作しませんでした。
追加された 著者 MattBH,

生成されたイベントにこのコードを配置するか、コンボボックスのテキストの選択を解除するボタンをクリックするだけです

ComboBox1.SelectedItem = null;
0
追加された
ええ!良い、ありがとう@shivam
追加された 著者 Murtuza Khan,

私の場合は、サイズ変更後に選択が表示されます。これはそれを解決しました:

textBox.Resize += (sender, args) =>
{
    Control c = sender as Control;
    if (c == null || c.Parent == null)
        return;

    c.Focus();
    c.Parent.Focus();
};
0
追加された