Поле со списком в прокручиваемой панели вызывает проблемы - PullRequest
6 голосов
/ 09 ноября 2010

У меня есть панель с AutoScroll, установленным на true.В нем я программно добавляю ComboBox элементы управления.Если я добавлю достаточно элементов управления, чтобы превысить видимый размер панели, появится полоса прокрутки (пока все хорошо).Однако, если я открою одно из полей со списком в нижней части видимой области, список со списком будет отображаться неправильно, и прокручиваемая область будет расширена.Это приводит к тому, что все элементы управления «вытягиваются» на новое дно панели с новым пустым пространством вверху.Если я продолжу нажимать на раскрывающийся список внизу панели, прокручиваемая область будет продолжать расширяться до бесконечности.Я закрепляю элементы управления слева, справа и сверху, поэтому я не думаю, что это связано с привязкой.Есть ли что-то очевидное, что может быть причиной этого?

Обновление: похоже, проблема заключается в закреплении элементов управления справа.Если я не закреплюсь вправо, то не получу странного поведения.Однако без правильной привязки элемент управления отключается полосой прокрутки.

Вот упрощенный тестовый пример, который я построил и который показывает проблему:

    public Form1()
    {
        InitializeComponent();

        Panel panel = new Panel();
        panel.Size = new Size(80, 200);
        panel.AutoScroll = true;

        for (int i = 0; i < 10; ++i)
        {
            ComboBox cb = new ComboBox();
            cb.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top;
            cb.Items.Add("Option 1");
            cb.Items.Add("Option 2");
            cb.Items.Add("Option 3");
            cb.Items.Add("Option 4");
            cb.Location = new Point(0, i * 24);
            panel.Controls.Add(cb);
        }

        Controls.Add(panel);
    }

Если прокрутить нижнюю часть панелии нажмите на поля со списком внизу, вы заметите странное поведение.

Ответы [ 3 ]

0 голосов
/ 01 января 2011

Попробуйте установить автопрокрутку в false и попробуйте использовать полосы прокрутки в обычном режиме.

В качестве альтернативы, если вы не можете найти другое разумное решение, можно было бы обрабатывать события прокрутки / изменения размера и вручную изменять размер / перемещать элементы управления (именно то, что делает якорь). Хотя это было бы довольно раздражающим, это избавиться от любых проблем, которые могут возникнуть.

0 голосов
/ 04 января 2011

Я тоже смог протестировать на устройстве Windows CE под Visual Studio 2005, .Net CF 2.0, так как у нас тоже есть вещи, использующие старое оборудование.У меня нет проблем.Может ли это быть проблема версии Windows CE на устройстве, которое вызывает проблему?Какое устройство используется (например: Производитель?).Я даже создал совершенно новый проект единой формы, так что никакие другие вещи не будут изменять / влиять на ваш код.

Работает ли это поведение при отладке, во время выполнения или в обоих случаях?

0 голосов
/ 24 декабря 2010

Кажется, это проблема, характерная для устройств, которые вы используете. Я не могу воспроизвести это поведение вообще. Вы пробовали установить свойство Dock панели? Как насчет других свойств, которые влияют на поведение прокрутки (AutoScrollMargin, AutoScrollMinSize, AutoScrollPosition)? Я бы также поиграл с размером панели и, возможно, использовал бы класс System.Windows.Forms.Screen, чтобы автоматически определить его в зависимости от устройства.

...