微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在C#中选择动态创建的列表框项

我动态创建了一个列表框并用一些项填充它.在文本框中键入一个点后,我想显示列表框,以便用户可以使用箭头键选择任何项目.
到目前为止,我做了一切.当用户在文本框中键入一个点时,会显示列表框,但箭头键不会选择任何项目!

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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐