私は、ユーザーが編集ボックスに名前を入力すると、ドロップダウンにユーザー名を入力するOutlookアドイン内にWinForms ComboBoxを持っています。ユーザーが3番目の文字に到達したとき。 ComboBoxのデータソースがこの時点で割り当てられ、カーソルは最後に留まる代わりにエディットボックスの先頭にジャンプします。入力時にWinforms ComboBoxでオートコンプリートがカーソル位置を変更するのはなぜですか?
私がしたい振る舞いは、ドロップダウンに多くのデータが入力されていても、入力中の文字列の最後にカーソルが留まることです。
私はsendキーでこれをハッキングしようとしましたが、それは必ずしも機能しません。下のキーを読み取るコードは、キー押下イベントにあります。
private void comboBox1_KeyPress(object sender, KeyEventArgs e)
{
var acceptableKeys = ConfigurationManager.AppSettings["AcceptableKeys"];
if (cmbAssignedTo.Text.Length > 2 && acceptableKeys.Contains(e.KeyCode.ToString().ToUpper()) && e.Modifiers == Keys.None)
{
var request = RestHandler.CreateRequest(ConfigurationManager.AppSettings["ContactsSearchResource"] + cmbAssignedTo.Text.Trim(), Method.GET);
var response = RestHandler.ExecuteRequest(request, ConfigurationManager.AppSettings["myServiceURL"]);
this.cmbAssignedTo.DataSourceChanged -= new System.EventHandler(this.cmbAssignedTo_DataSourceChanged);
//Assign a new data source
DataHandler.UpdateComboboxDataSource(cmbAssignedTo, response.Content);
this.cmbAssignedTo.DataSourceChanged += new System.EventHandler(this.cmbAssignedTo_DataSourceChanged);
}
e.Handled = true;
}
編集
internal static void UpdateComboboxDataSource(ComboBox cmbAssignedTo, string data)
{
var list = BuildAssignmentList(data);
if ((list.Count() == 0 && cmbAssignedTo.Items.Count == 0) || list.Count() > 0)
{
var savedText = cmbAssignedTo.Text;
cmbAssignedTo.DataSource = list;
cmbAssignedTo.SelectedValue = "";
cmbAssignedTo.Text = savedText;
SendKeys.Send("{end}");
}
if (cmbAssignedTo.Items.Count > 0)
{
cmbAssignedTo.DroppedDown = true;
Cursor.Current = Cursors.Default;
}
}
私はデータソースを変更せずにドロップダウンを更新することができますどのように表示されていないと、その変更は、カーソルがジャンプさせるために表示されます。私はKeyPressedとは異なるイベントを試すべきですか?私は行方不明の他の解決策はありますか?別として
「cmbAssignedTo_DataSourceChanged」のコードを質問に追加してください。 –
DataSourceが実際に変更されたコードを追加しました。イベントメソッド@ S.Petrosovリクエストは実際には何もしません。私はKeyPressedイベントからそれを削除します。 – Blanthor
私が見つけたこの検証遅延のトリックを試してください: https://stackoverflow.com/questions/8001450/c-sharp-wait-for-user-to-finish-typing-in-a-text-boxよろしくご協力ありがとうございます。 チーム – Tim