我动态创建了一个列表框并用一些项填充它.在文本框中键入一个点后,我想显示列表框,以便用户可以使用箭头键选择任何项目.
到目前为止,我做了一切.当用户在文本框中键入一个点时,会显示列表框,但箭头键不会选择任何项目!
到目前为止,我做了一切.当用户在文本框中键入一个点时,会显示列表框,但箭头键不会选择任何项目!
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(); } }
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中,调用ShowListBox()方法.没什么好看的!
注意:
当我使用向上或向下箭头键显式选择项目时,我只需要列表框来获得焦点.除非那时我需要能够自由地继续打字并且不会失去焦点到列表框.
这样做的方式是什么?
解决方法
从文本框keydown处理程序中删除焦点并将其放在此处:
private void ShowPopUpList(string s) { //your initialization of the //listBox here and after.. listBox1.Focus(); }
其他方式:
if (e.KeyCode == Keys.OemPeriod) { ShowPopUpList(s); listBox1.Focus(); }
真正的重大区别在于它会立即获得焦点.您的旧代码将首先检查keydown,在第二次命中时它将包含焦点.
最终编辑:
如果列表框需要关注上/下箭头键(并且只使用这些键):
if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Up) { ShowPopUpList(); listBox1.Focus(); listBox1.Selectedindex = 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。