2006-01-09 Jonathan Chambers <jonathan.chambers@ansys.com>
authorJonathan Chambers <joncham@gmail.com>
Sun, 8 Jan 2006 19:58:23 +0000 (19:58 -0000)
committerJonathan Chambers <joncham@gmail.com>
Sun, 8 Jan 2006 19:58:23 +0000 (19:58 -0000)
* ComboBox.cs: Added KeyDown event handler for processing arrow keys
and PgUp/PgDown. Also, scroll to selected item upon dropdown.

svn path=/trunk/mcs/; revision=55212

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ComboBox.cs

index b830beacc03fe03f371d75307dca6b0911613d85..78e7089101560221bb5c00963d46d79fddca3335 100644 (file)
@@ -1,3 +1,8 @@
+2006-01-09  Jonathan Chambers  <jonathan.chambers@ansys.com>
+
+       * ComboBox.cs: Added KeyDown event handler for processing arrow keys
+       and PgUp/PgDown. Also, scroll to selected item upon dropdown.
+
 2006-01-08  Alexander Olk  <alex.olk@googlemail.com>
 
        * MimeIcon.cs: Added internal class SVGUtil.
index f91cfcde6ddf6c0c0b7b2b859f62ae4688917d78..ec65ece48df2801da6cb95ec010e83899e5490d4 100644 (file)
@@ -144,6 +144,7 @@ namespace System.Windows.Forms
                        MouseDown += new MouseEventHandler (OnMouseDownCB);
                        MouseUp += new MouseEventHandler (OnMouseUpCB);
                        MouseMove += new MouseEventHandler (OnMouseMoveCB);
+                       KeyDown +=new KeyEventHandler(OnKeyDownCB);
                }
 
                #region events
@@ -1106,6 +1107,33 @@ namespace System.Windows.Forms
 
                        return -1;
                }
+
+               private void OnKeyDownCB(object sender, KeyEventArgs e)
+               {
+                       switch (e.KeyCode) 
+                       {                       
+                               case Keys.Up:
+                                       SelectedIndex = Math.Max(SelectedIndex-1, 0);
+                                       break;                          
+       
+                               case Keys.Down:                 
+                                       SelectedIndex = Math.Min(SelectedIndex+1, Items.Count-1);
+                                       break;
+                               
+                               case Keys.PageUp:
+                                       if (listbox_ctrl != null)
+                                               SelectedIndex = Math.Max(SelectedIndex- (listbox_ctrl.page_size-1), 0);
+                                       break;                          
+       
+                               case Keys.PageDown:             
+                                       if (listbox_ctrl != null)               
+                                               SelectedIndex = Math.Min(SelectedIndex+(listbox_ctrl.page_size-1), Items.Count-1);
+                                       break;
+                               
+                               default:
+                                       break;
+                       }
+               }
                
                internal virtual void OnMouseDownCB (object sender, MouseEventArgs e)
                {                       
@@ -1932,8 +1960,8 @@ namespace System.Windows.Forms
                                if (owner.DropDownStyle != ComboBoxStyle.Simple && owner.Items.Count == 0)
                                        return false;
                                        
-                               SetTopItem (0);
                                SetHighLightedItem (owner.SelectedItem);
+                               SetTopItem (GetHighLightedIndex ());
                                
                                CalcListBoxArea ();                             
                                Show ();