Select an item in a combo box with enter key

R

Rotsey

Hi,

I am having a problem trying to select an item with the enter key.

I want to work the combo with the keyboard.

So when I use the down arrow to browse the list I want to then
hit the enter key as if selecting an item with the mouse.

How do I do this?

Can't seem to get it working.

Is this a setup of the combo issue?

rotsey
 
A

Alex Meleta

Hi Rotsey,

Winfoms I guess?
If yes then why do you need to select it by Enter if on keyboard-mode SelectedIndexChanged
is called by any cursor movement?

Kind Regards, Alex Meleta
[TechBlog] http://devkids.blogspot.com



R> Hi,
R>
R> I am having a problem trying to select an item with the enter key.
R>
R> I want to work the combo with the keyboard.
R>
R> So when I use the down arrow to browse the list I want to then hit
R> the enter key as if selecting an item with the mouse.
R>
R> How do I do this?
R>
R> Can't seem to get it working.
R>
R> Is this a setup of the combo issue?
R>
R> rotsey
R>
 
S

Shine Xavier

Hi,

You are automatically selecting the items as you navigate using the Arrow
keys. So hitting the Enter key doesn't have any speciifc relevance as the
item would already have been selected by the time you hit the Enter key.

Please see the code below which demonstrates this:

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
this.comboBox1.SelectedIndexChanged +=new
EventHandler(comboBox1_SelectedIndexChanged);
//
}

static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{
comboBox1.Items.Add("A");
comboBox1.Items.Add("B");
comboBox1.Items.Add("C");
comboBox1.Items.Add("D");
comboBox1.Items.Add("E");

}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Debug.WriteLine(this.comboBox1.SelectedItem);
}

Hope this helps!
Thanks -
 
R

Rotsey

what I have is a form that displays data from db and a filter
on employee name combo

I want to be able to arrow key through the list and then hit enter when
I find the employee and then only requery the form on enter

is this possible and how?
 
S

Shine Xavier

Yes it is possible! You could consume the "KeyUp" event of the ComboBox for
doing this:
--------------------------------------------------------------------------------------------
The code below gives you a clear picture of the sequence in which the
relevant events are triggered.

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
this.comboBox1.SelectionChangeCommitted +=new
EventHandler(comboBox1_SelectionChangeCommitted);
this.comboBox1.KeyDown +=new KeyEventHandler(comboBox1_KeyDown);
this.comboBox1.KeyUp +=new KeyEventHandler(comboBox1_KeyUp);
//
}

static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{
comboBox1.Items.Add("A");
comboBox1.Items.Add("B");
comboBox1.Items.Add("C");
comboBox1.Items.Add("D");
comboBox1.Items.Add("E");

}


private void comboBox1_SelectionChangeCommitted(object sender, EventArgs
e)
{
Debug.WriteLine(this.comboBox1.SelectedItem);
}

private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Debug.WriteLine("ENTER KEY DOWN");
}
}

private void comboBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Debug.WriteLine("ENTER KEY UP");
/*Do your DB Re-Query operation here as this gets triggered after the
SelectChangeCommitted event...*/
}
}


Hope this helps!
Thanks-
 
I

Ignacio Machin \( .NET/ C# MVP \)

Hi,

Rotsey said:
what I have is a form that displays data from db and a filter
on employee name combo

I want to be able to arrow key through the list and then hit enter when
I find the employee and then only requery the form on enter
is this possible and how?

Yes, It's possible

You have to use Form.ProcessCmdKey.
 
R

Rotsey

Ok thanks I will give it ago

Shine Xavier said:
Yes it is possible! You could consume the "KeyUp" event of the ComboBox
for doing this:
--------------------------------------------------------------------------------------------
The code below gives you a clear picture of the sequence in which the
relevant events are triggered.

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
this.comboBox1.SelectionChangeCommitted +=new
EventHandler(comboBox1_SelectionChangeCommitted);
this.comboBox1.KeyDown +=new KeyEventHandler(comboBox1_KeyDown);
this.comboBox1.KeyUp +=new KeyEventHandler(comboBox1_KeyUp);
//
}

static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{
comboBox1.Items.Add("A");
comboBox1.Items.Add("B");
comboBox1.Items.Add("C");
comboBox1.Items.Add("D");
comboBox1.Items.Add("E");

}


private void comboBox1_SelectionChangeCommitted(object sender, EventArgs
e)
{
Debug.WriteLine(this.comboBox1.SelectedItem);
}

private void comboBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Debug.WriteLine("ENTER KEY DOWN");
}
}

private void comboBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Debug.WriteLine("ENTER KEY UP");
/*Do your DB Re-Query operation here as this gets triggered after the
SelectChangeCommitted event...*/
}
}


Hope this helps!
Thanks-
 
P

Peter Duniho

Yes, It's possible

You have to use Form.ProcessCmdKey.

I disagree on at least two counts: 1) there are other ways to do it, and
2) Control.ProcessCmdKey() isn't even the best way to do it.

Personally, I'd sub-class the control and override the
Control.ProcessDialogKey() method.

ProcessCmdKey() is more commonly used for keyboard accelerator shortcuts
(Alt-<key>, Ctrl-<key>, etc.) while ProcessDialogKey() is intended for
situations in which a modifier key isn't relevant. As also has been
pointed out, one can subscribe to the KeyUp or KeyDown events (I prefer
KeyDown, because you will get one for each key repeat, but sometimes you
don't want to handle key repeats in which case KeyUp is preferable). You
can even subscribe to KeyPress if what you care about is the character
code generated rather than a specific key.

Not that you can't do it using ProcessCmdKey()...I just feel that there
are other, more appropriate methods.

Pete
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top