Изменение размера формы и ее влияние на динамически создаваемый список - PullRequest
1 голос
/ 16 марта 2012

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

Вот пример кода:

public class KI_Tab_Items_ListviewControl : KI_Tab_Items, IDisposable
{
    private ListView m_Listview = new ListView();
    private ComboBox m_ComboBox = new ComboBox();

    public ListView ListViewControl { get { return m_Listview; } set { m_Listview = value; } }
    public ComboBox ComboBoxControl { get { return m_ComboBox; } set { m_ComboBox = value; } }

    public override void ClearItems()
    {
        ListViewControl.Items.Clear();
    }
    public override void PopulateControls()
    {
        base.PopulateControls();
    }
    public virtual void AddColumnHeaders()
    {
        ListViewControl.Columns.Clear();
    }
    public KI_Tab_Items_ListviewControl(TabControl m_TabControl, int lIndex, bool DisplayComboBox = true)
    {
        if (m_TabControl.TabPages[lIndex].Controls.Count == 0)
        {
            int ListviewTop = 0;
            m_TabControl.TabPages[lIndex].Controls.Clear();
            if (DisplayComboBox)
            {
                m_TabControl.TabPages[lIndex].Controls.Add(ComboBoxControl);
                ComboBoxControl.Dock = DockStyle.Top;
                ComboBoxControl.Visible = true;
                ComboBoxControl.Left = 0;
                ComboBoxControl.Top = 0;
                ListviewTop = ComboBoxControl.Top + ComboBoxControl.Height;
            }

            m_TabControl.TabPages[lIndex].Controls.Add(ListViewControl);

            ListViewControl.Anchor = AnchorStyles.Top;
            ListViewControl.Dock = DockStyle.Bottom;
            ListViewControl.Visible = true;
            ListViewControl.Top = ListviewTop;
            ListViewControl.Height = m_TabControl.TabPages[lIndex].Height - ListviewTop;
        }
    }
    void System.IDisposable.Dispose()
    {
        Tab_Control.Controls.Clear();
        m_Listview = null;
        m_ComboBox = null;
    }
}

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Установите ComboBox на Top. Если он скрывает верхнюю часть вашего Full закрепленного ListView, вам нужно открыть окно «Структура документа» и поменять местами ордера ComboBox и ListView. В качестве альтернативы вы можете установить Anchor свойство ListView (например, если вы добавите якорь Right, он будет держать свое расстояние от правой границы при изменении размера формы).

1 голос
/ 16 марта 2012

Добавить ListView FIRST.Установите ListViewControl.Dock = DockStyle.Fill .Добавьте ComboBox LAST.Sett ComboBoxControl.Dock = DockStyle.Top .

public void KI_Tab_Items_ListviewControl( TabControl m_TabControl, int lIndex, bool DisplayComboBox = true )
{
    if ( m_TabControl.TabPages[ lIndex ].Controls.Count == 0 )
    {
        int ListviewTop = 0;

        m_TabControl.TabPages[ lIndex ].Controls.Clear();

        m_TabControl.TabPages[ lIndex ].Controls.Add( ListViewControl );

        // Add ListView FIRST.
        // NOTE: set ListViewControl.Dock = DockStyle.Fill;
        //

        ListViewControl.Anchor = AnchorStyles.Top;
        ListViewControl.Dock = DockStyle.Fill;
        ListViewControl.Visible = true;
        ListViewControl.Top = ListviewTop;
        ListViewControl.Height = m_TabControl.TabPages[ lIndex ].Height - ListviewTop;

        // Add ComboBox last.
        // NOTE: set ComboBoxControl.Dock = DockStyle.Top;
        //

        if ( DisplayComboBox )
        {
            m_TabControl.TabPages[ lIndex ].Controls.Add( ComboBoxControl );
            ComboBoxControl.Dock = DockStyle.Top;
            ComboBoxControl.Visible = true;
            ComboBoxControl.Left = 0;
            ComboBoxControl.Top = 0;
            ListviewTop = ComboBoxControl.Top + ComboBoxControl.Height;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...