キーと値のペアのリストでデータバインドするクリプトンコンボボックスがあります。選択した項目をコードで設定すると、テキストが強調表示されます。これを防ぐ、またはテキストの選択を解除するにはどうすればよいですか?
私は以下を試しました:
// 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;
何も機能していないようです。どんな助けでも大歓迎です。
コントロール/ウィンドウのOnPaintイベントをオーバーライドして、これを達成することができました。
combobox1.SelectionLength = 0;
私はうまくいく解決策を見つけたかもしれません:
フォームを使用している場合は、フォームの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が遭遇していたハイライトが発生しました。
コンボボックスのテキストの選択を解除する生成されたイベントまたはボタンクリックにこのコードを配置するだけです。
ComboBox1.SelectedItem = null;
これを試してみてください
combo.SelectedText = String.Empty;
フォーカスに関する問題について:( [〜#〜] msdn [〜#〜] )
コンボボックスのフォーカスが失われると、選択ポイントがテキストの先頭に移動し、選択したテキストが選択解除されます。
とても奇妙;以下が機能しなかった理由:
anotherControl.Focus();
あなたがこの質問をしてからしばらく経ちました。しかし、ここにあなたができることがあります
combo.selectedindex = -1;
イベントSelectedIndexChangedで、10ミリ秒後に1回だけ実行されるタイマーを追加します。
new System.Threading.Timer((s) =>
{
comboBox1.Invoke(new Action(() =>
{
comboBox1.Select(0, 0);
}));
}, null, 10, System.Threading.Timeout.Infinite);
これらの3行は私を助けました:
cbInstallationType.SelectionStart = 0;
cbInstallationType.SelectionLength = 0;
cbInstallationType.TabIndex = 99;
TabIndexは最初のものである必要がないため、フォームの最初の項目ではありません
これが私がすることです:
private void faceComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
this.ActiveControl = cancelButton;
}
私の場合、サイズ変更後に選択が表示されました。これはそれを解決しました:
textBox.Resize += (sender, args) =>
{
Control c = sender as Control;
if (c == null || c.Parent == null)
return;
c.Focus();
c.Parent.Focus();
};
ユーザーがComboBox値を編集できるようにするかどうかを指定しませんでした。そうでない場合は、ComboBoxのDropDownStyle
をComboBoxStyle.DropDownList
に設定する必要があります。このように、ComboBoxは既存の値の選択のみを許可し、ユーザーは新しい値を入力できず、テキストが強調表示されることはありません。
ComboBoxのフォーカスを設定するタスクがある「SelectedIndexChanged」イベントをサブスクライブします。
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Focus();
}
メインフォームから「Paint」イベントに登録します。選択解除は、次のイベントハンドラで行われます。
private void MainForm_Paint(object sender, PaintEventArgs e)
{
comboBox1.SelectionLength = 0;
}
「選択」は私には機能しません。しかし、私は非常に単純なトリックを見つけました。この権利をSelectedIndexChanged-Eventに追加します。
comboBox1.Hide();
comboBox1.Show();
私のために働きます。
バックグラウンドで何をしているのかわからない、つまり発生したイベントなど。ただし、combox selectedindexchangedイベントでは、anotherControl.Select()を追加できます。
それはすべきです:)
私は知っています、古代のポスト、古代の技術、しかしこの醜いワンライナーは私のために働きました:
cb.SelectedValueChanged += (s, e) => { cb.BeginInvoke((MethodInvoker)delegate { cb.SelectionStart = cb.Text.Length; }); };