Показать список вне формы (winforms) - PullRequest
4 голосов
/ 07 мая 2009

Можно ли сделать так, чтобы мой список отображался за пределами формы?

Одним из решений является сделать саму форму прозрачной и добавить панель вместо формы для фона.

Но есть ли другой, более восхитительный способ сделать это?

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

ТНХ

Ответы [ 3 ]

8 голосов
/ 19 мая 2009

На самом деле, это возможно. Вот способ:

public class PopupWindow : System.Windows.Forms.ToolStripDropDown
{
    private System.Windows.Forms.Control _content;
    private System.Windows.Forms.ToolStripControlHost _host;

    public PopupWindow(System.Windows.Forms.Control content)
    {
        //Basic setup...
        this.AutoSize = false;
        this.DoubleBuffered = true;
        this.ResizeRedraw = true;

        this._content = content;
        this._host = new System.Windows.Forms.ToolStripControlHost(content);

        //Positioning and Sizing
        this.MinimumSize = content.MinimumSize;
        this.MaximumSize = content.Size;
        this.Size = content.Size;
        content.Location = Point.Empty;

        //Add the host to the list
        this.Items.Add(this._host);
    }
}


popup = new PopupWindow(listbox1);
PopupWindow.show(); 
3 голосов
/ 07 мая 2009

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

1 голос
/ 07 мая 2009

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

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

В ходе моей нынешней работы я видел как минимум три разных доморощенных комбо-бокса, которые были разбиты по-разному, что означало большую работу без реальной отдачи. Моим любимым был комбо-бокс, выпадающий список которого украл фокус на формах-владельцах. Было действительно забавно наблюдать, как сломанный код вызывает мерцание всего, что использует его.

Edit:

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

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