Datagrid and focus confusion

B

Bill C.

Hi,

I'm trying to implement a ComboBox drop-down column for a DataGrid.
When a cell is selected in the ComboBox column I overlay a ComboBox
over the cell and call:

this.comboBox.Show();
this.comboBox.BringToFront();
this.comboBox.Focus();

Now when I press the up/down arrow keys I would expect the ComboBox
to respond to those keyboard inputs because it has the focus. But
it doesn't. Somehow the DataGrid gets the key strokes and causes
the next row in the DataGrid to be selected.

Why would this be? I'm positive the ComboBox has the focus. I
added event handlers for the DataGrid enter/leave, and the ComboBox
enter/leave events and I only see the ComboBox ones getting called.

This is really annoying. The only workaround I've found is to
derive a class from ComboBox that overrides the WndProc and
ProcessCmdKey methods and catches the keystrokes and tries to
do the correct thing. But this has problems because then I have
to catch everything (Enter, Tab, Shift-tab, Left, Right, etc.).

Now I'm having a problem processing Enter correctly. When the
ComboBox drop down list is displayed I can now go up and down
the list using the arrow keys but the only way I can correctly
select one is with the mouse. When I try to use the enter key
nothing happens because I've overridden its behavior and I'm
not sure what methods to call to make it work correctly (i.e.
commit the current choice and collapse the menu again).

I don't understand why the ComboBox isn't handling these things
automatically if it has the focus.

Any help appreciated. Thanks,

Bill
 
D

Dmitriy Lapshin [C# / .NET MVP]

Hi Bill,

This is the wrong way of implementing a custom column. You have probably
been inspired by an example once published by Microsoft. I don't know why on
Earth such an inconvenient way of doing things was suggested in that
example, but you should definitely avoid that and refer to recent MSDN
articles on implementing custom DataGridColumnStyles which are actually the
only right way to customize the DataGrid.
 
D

Dmitriy Lapshin [C# / .NET MVP]

Keith,

Here are the links (mind the line wraps):

http://msdn.microsoft.com/msdnmag/issues/03/08/DataGrids/toc.asp?frame=true
http://msdn.microsoft.com/library/en-us/dnwinforms/html/wnf_CustDataGrid.asp?frame=true
http://msdn.microsoft.com/library/e...sDataGridColumnStyleClassTopic.asp?frame=true


--
Dmitriy Lapshin [C# / .NET MVP]
X-Unity Test Studio
http://x-unity.miik.com.ua/teststudio.aspx
Bring the power of unit testing to VS .NET IDE

Keith Lubell said:
Not a very helpful comment. Can we get a link to these samples please!

Dmitriy Lapshin said:
Hi Bill,

This is the wrong way of implementing a custom column. You have probably
been inspired by an example once published by Microsoft. I don't know
why
on
Earth such an inconvenient way of doing things was suggested in that
example, but you should definitely avoid that and refer to recent MSDN
articles on implementing custom DataGridColumnStyles which are actually the
only right way to customize the DataGrid.

--
Dmitriy Lapshin [C# / .NET MVP]
X-Unity Test Studio
http://x-unity.miik.com.ua/teststudio.aspx
Bring the power of unit testing to VS .NET IDE

Bill C. said:
Hi,

I'm trying to implement a ComboBox drop-down column for a DataGrid.
When a cell is selected in the ComboBox column I overlay a ComboBox
over the cell and call:

this.comboBox.Show();
this.comboBox.BringToFront();
this.comboBox.Focus();

Now when I press the up/down arrow keys I would expect the ComboBox
to respond to those keyboard inputs because it has the focus. But
it doesn't. Somehow the DataGrid gets the key strokes and causes
the next row in the DataGrid to be selected.

Why would this be? I'm positive the ComboBox has the focus. I
added event handlers for the DataGrid enter/leave, and the ComboBox
enter/leave events and I only see the ComboBox ones getting called.

This is really annoying. The only workaround I've found is to
derive a class from ComboBox that overrides the WndProc and
ProcessCmdKey methods and catches the keystrokes and tries to
do the correct thing. But this has problems because then I have
to catch everything (Enter, Tab, Shift-tab, Left, Right, etc.).

Now I'm having a problem processing Enter correctly. When the
ComboBox drop down list is displayed I can now go up and down
the list using the arrow keys but the only way I can correctly
select one is with the mouse. When I try to use the enter key
nothing happens because I've overridden its behavior and I'm
not sure what methods to call to make it work correctly (i.e.
commit the current choice and collapse the menu again).

I don't understand why the ComboBox isn't handling these things
automatically if it has the focus.

Any help appreciated. Thanks,

Bill
 

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