web-dev-qa-db-ja.com

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

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

私は以下を試しました:

// 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;

何も機能していないようです。どんな助けでも大歓迎です。

18
MattBH

コントロール/ウィンドウのOnPaintイベントをオーバーライドして、これを達成することができました。

combobox1.SelectionLength = 0;
7
Scott

私はうまくいく解決策を見つけたかもしれません:

フォームを使用している場合は、フォームのShownイベントにサブスクライブします。

[〜#〜]または[〜#〜]

(私のように)UserControlを使用している場合は、VisibleChangedイベントをサブスクライブできます。

その場合、次のことができます。

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

余談として:

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

3
Smitty

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

ComboBox1.SelectedItem = null;
2
Murtuza Khan

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

combo.SelectedText = String.Empty;

フォーカスに関する問題について:( [〜#〜] msdn [〜#〜]

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

とても奇妙;以下が機能しなかった理由:

anotherControl.Focus(); 
2
sll

あなたがこの質問をしてからしばらく経ちました。しかし、ここにあなたができることがあります

combo.selectedindex = -1;
1
gurrawar

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

new System.Threading.Timer((s) =>
            {
                comboBox1.Invoke(new Action(() =>
                {
                    comboBox1.Select(0, 0);
                }));
            }, null, 10, System.Threading.Timeout.Infinite);
1
Geograph

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

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

TabIndexは最初のものである必要がないため、フォームの最初の項目ではありません

0
Aedna

これが私がすることです:

private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
     this.ActiveControl = cancelButton;
}
0
Cesar A. Rivas

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

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

    c.Focus();
    c.Parent.Focus();
};
0
P. Av.

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

0
Alex

ComboBoxのフォーカスを設定するタスクがある「SelectedIndexChanged」イベントをサブスクライブします。

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    comboBox1.Focus();
}

メインフォームから「Paint」イベントに登録します。選択解除は、次のイベントハンドラで行われます。

private void MainForm_Paint(object sender, PaintEventArgs e)
{
    comboBox1.SelectionLength = 0;
}
0
Martin Wantke

「選択」は私には機能しません。しかし、私は非常に単純なトリックを見つけました。この権利をSelectedIndexChanged-Eventに追加します。

comboBox1.Hide();
comboBox1.Show();

私のために働きます。

0
FranD

バックグラウンドで何をしているのかわからない、つまり発生したイベントなど。ただし、combox selectedindexchangedイベントでは、anotherControl.Select()を追加できます。

それはすべきです:)

0
spoon

私は知っています、古代のポスト、古代の技術、しかしこの醜いワンライナーは私のために働きました:

cb.SelectedValueChanged += (s, e) => { cb.BeginInvoke((MethodInvoker)delegate { cb.SelectionStart = cb.Text.Length; }); };
0
Ola Berntsson