在C#中选择动态创建的列表框项
发布时间:2020-12-15 21:54:09 所属栏目:百科 来源:网络整理
导读:我动态创建了一个列表框并用一些项填充它.在文本框中键入一个点后,我想显示列表框,以便用户可以使用箭头键选择任何项目. 到目前为止,我做了一切.当用户在文本框中键入一个点时,会显示列表框,但箭头键不会选择任何项目! private void txtResults_KeyDown(obj
我动态创建了一个列表框并用一些项填充它.在文本框中键入一个点后,我想显示列表框,以便用户可以使用箭头键选择任何项目.
到目前为止,我做了一切.当用户在文本框中键入一个点时,会显示列表框,但箭头键不会选择任何项目! 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中,调用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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |