Pressing Enter Key will Add the Selected Item From

2019-08-23 04:33发布

问题:

related to this topic: Hidden ListBox will appear while Typing Words in RichTextBox

im working on a code editor and i just want to know if how can I add items from listbox to textbox using enterkey .

further more heres my strings:

public String[] ab = { "abstract" };
public String[] am = { "AmbientProperties", "AmbientValueAttribute" };

sample:

in richtextbox (rtb) , i type Ab, then hiddenlistbox will appear with "abstract" text on it (already do that) using this code:

if (token == "letterA" || token.StartsWith("Ab") || token.StartsWith("ab"))
{
    int length = line.Length - (index - start);
    string commentText = rtb.Text.Substring(index, length);
    rtb.SelectionStart = index;
    rtb.SelectionLength = length;
    lb.Visible = true;

    KeyWord keywordsHint = new KeyWord();

    foreach (string str in keywordsHint.ab)
    {
        lb.Items.Add(str);
    }
    break;
}

then after that after i press enterkey i want to add the abstract from listbox to the richtextbox .

RichTextBox declared as rtb and ListBox declared as lb

what should i do? thanks .

回答1:

Certain controls do not recognize some keys when they are pressed in key down event. For eg ListBox do not recognize if key pressed is Enter Key.

Please see remarks section in following link - http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown(v=vs.110).aspx

one of the solution for your problem can be http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown(v=vs.110).aspx

implement PreviewKeyDown Event for your listbox for listbox to recognize your actions.

Here is sample code snippet -

    private void listBox1_KeyDown(object sender, KeyEventArgs e)
    {

        if (e.KeyCode == Keys.Enter)
        {
            //Do your task here :)
        }
    }

    private void listBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.Enter:
                e.IsInputKey = true;
                break;
        }
    }


回答2:

You cannot directly type text to a listbox, so I created a example with textBox:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13)
    {
        this.richTextBox1.AppendText((sender as TextBox).Text);
        e.Handled = true;
    }
}

If you meant comboBox you can easily adjust this, replace line above:

private void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13)
    {
        this.richTextBox1.AppendText((sender as ComboBox).Text);
        e.Handled = true;
    }
}

Copy selected listbox entries to rtf box:

private void listBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == 13)
    {
        foreach (string s in listBox1.SelectedItems)
        {
            this.richTextBox1.AppendText(s + Environment.NewLine);
        }

        e.Handled = true;
    }
}