Pho Tai Loc Ответов: 1

У меня проблема управления flowlayoutpanel размер ширина заливки вместо того, чтобы приведенный статический размер


Я пытаюсь создать 96 FlowLayoutPanel внутри другой FlowLayoutPanel, прямо сейчас у меня есть размер каждой FlowLayoutPanel, заданный fl.Размер = новый размер(1000, 30);. Мне нужна помощь, чтобы изменить размер fl.Size = новый размер(автозаполнение, 30);. таким образом, он может заполнить ширину вместо заданного статического размера ширины.

Спасибо

Что я уже пробовал:

private List<FlowLayoutPanel> listFl96 = new List<FlowLayoutPanel>();
private void Gennerate96FL(int total96)
        {
            fl96.Controls.Clear();
            listFl96.Clear();
            for (int i = 1, loopTo = total96; i <= loopTo; i++)
            {
                var fl = new FlowLayoutPanel();
                fl.Name = $"fl96{i}";
                fl.Size = new Size(1000, 30);
                fl.BackColor = Color.Cornsilk;
                fl.BorderStyle = BorderStyle.FixedSingle;
                fl.Cursor = Cursors.Hand;
                fl.AutoScroll = true;
                fl96.Controls.Add(fl);
                listFl96.Add(fl);
            }
        }

1 Ответов

Рейтинг:
2

johannesnestler

Привет,

Насколько я знаю, нет хорошего способа выразить это в Windows.Формы с FlowLayoutPanel потому что нормальный "DockStyle.Сверху" не сработает.

Итак вот возможный пример решения:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();


        master.Dock = DockStyle.Fill;
        master.SizeChanged += Master_SizeChanged;
        this.Controls.Add(master);

        m_iWidth = master.Width;

        Gennerate96FL(96);
    }

    private void Master_SizeChanged(object sender, EventArgs e)
    {
        if(m_iWidth != master.Width)
        {
            m_iWidth = master.Width;
            foreach (FlowLayoutPanel flp in listFl96)
                flp.Width = m_iWidth;
        }
    }

    int m_iWidth;
    FlowLayoutPanel master = new FlowLayoutPanel();
    private List<FlowLayoutPanel> listFl96 = new List<FlowLayoutPanel>();

    private void Gennerate96FL(int total96)
    {
        master.Controls.Clear();
        listFl96.Clear();
        for (int i = 1, loopTo = total96; i <= loopTo; i++)
        {
            var fl = new FlowLayoutPanel();
            fl.Name = $"fl96{i}";
            fl.Height = 30;
            fl.BackColor = Color.Cornsilk;
            fl.BorderStyle = BorderStyle.FixedSingle;
            fl.Cursor = Cursors.Hand;
            fl.AutoScroll = true;
            fl.Width = m_iWidth;

            master.Controls.Add(fl);
            listFl96.Add(fl);
        }
    }
}


Поэтому мы устанавливаем начальную ширину "дочерних" FlowLayoutPanels на ширину его родительской FlowLayoutPanel (я назвал ее "master") и реагируем на любые изменения ширины для "главной" FlowLayoutPanel (которая затем обновляет свойства ширины "childs)
Не очень хорошее решение, но оно работает...