Выпадающий список Combobox - PullRequest
6 голосов
/ 26 июля 2011

У меня есть форма с выпадающим списком.

В выпадающем списке установлен DropDownList. Эти выпадающие элементы являются описательной формой объекта. Это означает, что они могут получить довольно долго. Положение комбинированного списка на экране означает, что при отображении выпадающего списка он не умещается на экране. Часть из них отрублена правым краем экрана.

Я не могу переместить комбобокс.

Это какой-то способ, которым я могу переместить раскрывающийся список в элемент управления. Может быть, центр его под контролем?

Обновление

Я прикрепил скриншот. Вы можете увидеть форму здесь -

enter image description here

При вводе транзакции пользователь заполняет форму и нажимает кнопку Сохранить. Количество транзакций, которые будут введены для любого клиента, хотя будут повторяющимися транзакциями. Их можно сохранить в избранное. В раскрывающемся списке перечислены сохраненные в настоящий момент избранные списки, и при их выборе программа автоматически заполняет поля транзакций.

Снимок экрана 2, на котором показана вся программа и список выпадающих списков, на которых не осталось места.

enter image description here

Я понимаю, что на скриншоте я могу переместить форму, но мне нравится держать формы для ввода транзакций в центре экрана.

Возможно, мне придется поискать другие варианты интерфейса.

Спасибо

Ответы [ 4 ]

2 голосов
/ 10 августа 2011

возможно, вам следует создать собственный comboBox, как показано здесь:

http://msdn.microsoft.com/en-us/library/ms996411

0 голосов
/ 11 марта 2016

Извините за позднюю публикацию :-).Да, вы можете сделать это.Но вам нужно создать пользовательский ComboBox и переопределить метод WndProc для base ComboBox;

Это так;

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);
}

Код получен из статьи MSDN Создание лучшего ComboBox

0 голосов
/ 28 июля 2011

Попробуйте установить DropdownWidth в комбо.

0 голосов
/ 27 июля 2011

Вы пробовали установить в конструкторе

Combobox.Anchor = Left | Right
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...