Добавление вертикальной полосы прокрутки и разрыва строки на панели в зависимости от размеров ее элементов

Я хотел бы отображать результат каждой строки объекта SqlDataReader в виде нескольких динамических групповых полей, привязанных к существующей панели.

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

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

Вот мой код:

SqlCommand cmd = new SqlCommand(sqlString, cnx); //return;
SqlDataReader myReader;
myReader = cmd.ExecuteReader(); 
int i = 0; int j = 0;
int sw = Screen.PrimaryScreen.Bounds.Width;//sw=1920
int sh = Screen.PrimaryScreen.Bounds.Height;//sh=1080

panel1.HorizontalScroll.Maximum = 0;
panel1.AutoScroll = false;
panel1.VerticalScroll.Visible = false;
panel1.AutoScroll = true;

while (myReader.Read())
{
    MessageBox.Show("Results : \n Distinct values : " + myReader["column1"].ToString() + " Occurence number  : " + myReader["nbre_column1"].ToString());                        
    //I can show all values including on myReader on this message box

    GroupBox resultGroupBox = new GroupBox();
    resultGroupBox.Size = new System.Drawing.Size((sw * 20) / 100, (sh * 20) / 100);
    resultGroupBox.Location = new Point(44 + i, 36);
    i = i + 390;
    //j = j + 220;
    panel1.Controls.Add(resultGroupBox);
}

в итоге я хотел бы иметь две вещи:

  1. «Разрыв строки» для динамически добавляемых групповых полей, когда их общая ширина превышает ширину панели, и нет горизонтальной полосы прокрутки.
  2. Вертикальная полоса прокрутки, когда общая высота всех «строк» ​​групповых полей превышает высоту панели.

Предоставленный код не предотвращает появление горизонтальной полосы прокрутки, и если строка j = j + 220 раскомментирована, появляются обе полосы прокрутки, но без разрыва строки.

Заранее спасибо за помощь.


person YIdirm    schedule 23.09.2018    source источник


Ответы (1)


Используйте FlowLayoutPanel вместо Panel и установите ее свойства следующим образом (если они еще не установлены):

  • Автопрокрутка: Истина; добавляет вертикальную полосу прокрутки, когда это необходимо
  • WrapsContent: Истина; позволяет контенту перетекать по горизонтали, когда это необходимо
person Kilazur    schedule 23.09.2018