を動的に作成し、Listbox
いくつかの項目を入力しました。 にドットを入力すると、ユーザーが矢印キーを使用して任意の項目を選択できるようTextbox
に を表示したいと思います。
ここまで全部やりました。ユーザーが にドットを入力すると、が表示されますが、矢印キーでは項目が選択されません!Listbox
Textbox
Listbox
private void txtResults_KeyDown(object sender, KeyEventArgs e)
{
string[] words= ((TextBox)sender).Text.Split(' ');
string s = sampleWord.Text = words[words.Length - 1];
if (e.KeyCode == Keys.OemPeriod)
{
ShowPopUpList(s);
}
else if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Up)
{
lst.Focus();//doesnt work :-/
}
else
{
lst.Hide();
txtResults.Focus();
}
}
これは FormLoad() でリストボックスを作成するためのコードです
private void CreateListBox()
{
lst = new ListBox();
lst.Size = new Size(70, 130);
lst.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
lst.KeyDown += lst_KeyDown;
lst.DoubleClick += lst_DoubleClick;
//adding some test input
lst.Items.Add("بسم");
lst.Items.Add("الله ");
lst.Items.Add("الرحمن ");
lst.Items.Add("الرحیم ");
lst.Items.Add("بنام ");
lst.Items.Add("خداوند ");
lst.Items.Add("بخشنده ");
lst.Items.Add("مهربان ");
lst.Items.Add("الهی شکرت ");
}
private void ShowListbox()
{
txtResults.SelectionStart = txtResults.Text.Length;
txtResults.SelectionLength = 0;
Point index = txtResults.GetPositionFromCharIndex(txtResults.SelectionStart-1);
lst.Location = new Point (index.X-50, index.Y+70);
this.Controls.Add(lst);
lst.BringToFront();
lst.Show();
}
メソッドで呼び出されますShowPopUpList(s)
。ShowListbox()
それについて空想は何もありません!
ノート:
UP または DOWN 矢印キーを使用して項目を明示的に選択する場合にのみ、リスト ボックスにフォーカスが必要です。そうでない限り、自由に入力を続け、リストボックスへのフォーカスを失わないようにする必要があります。
それを回避する方法は何ですか?