2011-07-26 23 views
6

Tengo un formulario que tiene un cuadro combinado.Lista desplegable de cuadro combinado

El cuadro combinado se establece DropDownList. Estos elementos desplegables son una forma descriptiva de un objeto. Esto significa que pueden ser bastante largos. La posición del cuadro combinado en la pantalla significa que cuando se muestra la lista desplegable no todo cabe en la pantalla. Parte del mismo está cortado por el borde derecho de la pantalla.

No puedo mover el cuadro combinado.

De alguna manera puedo mover la lista desplegable parte del control. Tal vez lo centre bajo el control?

actualización

Me he adjuntado una captura de pantalla. Se puede ver la forma aquí -

enter image description here

Al entrar en las transacciones que el usuario rellena el formulario y hace clic en Guardar. Sin embargo, varias de las transacciones que se ingresarán para cualquier cliente serán transacciones recurrentes. Estos se pueden guardar en los favoritos. El cuadro desplegable enumera los favoritos actualmente guardados y cuando se selecciona uno, el programa rellena automáticamente los campos de transacción.

Captura de pantalla 2 que muestra todo el programa y la lista del cuadro combinado que se queda sin espacio.

enter image description here

que dan cuenta de la captura de pantalla que podía mover el formulario, pero me gusta mantener las formas de entrar en transacciones centradas en la pantalla.

Es posible que tenga que mirar otras opciones para la interfaz.

Gracias,

+1

sugerencia: ¿por qué no usar un desplegable con simples nombres/líneas, y un cuadro de texto de varias líneas que se rellena con la descripción completa cuando el usuario selecciona uno entrada en el cuadro combinado. De esta manera, el cuadro de texto puede contener todo el texto, y el usuario está contento :) – woohoo

+0

Parece que tiene un problema similar a este http://stackoverflow.com/questions/2395747/combo-box-dropdown-position – kavun

+0

Cómo sobre el uso de una sola columna ListBox o ListView que proporciona barras de desplazamiento. Lograr esto no es fácil con ComboBox. – CharithJ

Respuesta

0

Por favor, intente configurar en el diseñador

Combobox.Anchor = Left | Right 
+0

@ user476683. Esto no ayudó desafortunadamente. – user476683

0

Intente configurar la DropdownWidth del combo.

0

Lo siento por la publicación tardía :-). Si tu puedes hacerlo. Pero necesita crear un ComboBox personalizado y anular el método WndProc de base ComboBox;

Es así;

System.Runtime.InteropServices 

private const int SWP_NOSIZE = 0x1; 
private const int WM_CTLCOLORLISTBOX = 0x0134; 

[DllImport("user32.dll")] 
static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int 
X, int Y, int cx, int cy, uint uFlags); 

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_CTLCOLORLISTBOX) 
    { 
     // Make sure we are inbounds of the screen 
     int left = this.PointToScreen(new Point(0, 0)).X; 

     //Only do this if the dropdown is going off right edge of screen 
     if (this.DropDownWidth > Screen.PrimaryScreen.WorkingArea.Width - left) 
     { 
      // Get the current combo position and size 
      Rectangle comboRect = this.RectangleToScreen(this.ClientRectangle); 

      int dropHeight = 0; 
      int topOfDropDown = 0; 
      int leftOfDropDown = 0; 

      //Calculate dropped list height 
      for (int i = 0; (i < this.Items.Count && i < this.MaxDropDownItems); i++) 
      { 
       dropHeight += this.ItemHeight; 
      } 

      //Set top position of the dropped list if 
      //it goes off the bottom of the screen 
      if (dropHeight > Screen.PrimaryScreen.WorkingArea.Height - 
        this.PointToScreen(new Point(0, 0)).Y) 
      { 
       topOfDropDown = comboRect.Top - dropHeight - 2; 
      } 
      else 
      { 
       topOfDropDown = comboRect.Bottom; 
      } 

      //Calculate shifted left position 
      leftOfDropDown = comboRect.Left - (this.DropDownWidth - 
        (Screen.PrimaryScreen.WorkingArea.Width - left)); 
      //when using the SWP_NOSIZE flag, cx and cy params are ignored 
      SetWindowPos(m.LParam, 
         IntPtr.Zero, 
         leftOfDropDown, 
         topOfDropDown, 
         0, 
         0, 
         SWP_NOSIZE); 
      } 
     } 

     base.WndProc(ref m); 
} 

El código es obtener a partir de un artículo de MSDN Building a Better ComboBox

Cuestiones relacionadas