2014-10-30 6 views
0

У меня действительно странная совокупность обстоятельств, которые я просто не могу заставить работать. Я дам вам знать, что у меня есть, и посмотрим, можете ли вы меня исправить. (Ниже приведено самое близкое, что я смог дойти до того, что хочу).TableLayoutPanel Winforms, не отображающий всю информацию

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

У меня есть

TableLayoutPanel (Dock = Fill; 1 column (100percent); 1 Row (Autosize). 

Затем каждый выбран имеет пользовательский элемент управления (ucSchedulerDay) это добавляется в качестве строки к TableLayoutPanel. Так возьмите один день, например, вы бы это:

TableLayoutPanel (Dock = Fill; 1 Column (100%); 1 Row (Autosize). 
    - (Row1 Column1) ucSchedulerDay 

Так ucSchedulerDay только пользовательский элемент управления, который находится в GroupBox (Dock = Fill) и FlowLayoutPanel (также док = заполнить внутри GroupBox)

для каждого грузового автомобиля я еще один UserControl добавил к FlowLayoutPanel (они имеют фиксированную ширину), поэтому в основном то, что у меня есть следующий за один день

TableLayoutPanel (as above (also forgot to mention that AutoScrollBars=True) 
    - (Row 1 Column 1) ucSchedulerDay (Dock=Fill(done in code when added)) 
    - GroupBox (Dock=Fill) 
     - FlowLayoutPanel (Dock=Fill) 
     - ucLorryDay1 
     - ucLorryDay2 

Working screen Это прекрасно работает до тех пор, как все L orries подходят на экране (см. выше), поэтому за один день с 2 грузовиками (или даже до 5 на моем мониторе), тогда все в порядке. Однако, если я выберу два дня или сделаю экран меньшим, вместо того, чтобы показывать полосы прокрутки, но обычно они имеют одинаковый макет, он разрезает некоторые из ucLorryDays и просто не отображает других.

Problem with smaller display or more items

Обратите внимание на выше картинке, как серый грузовик отрезан, даже полоса прокрутки не распространяется так далеко.

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

+0

Я лично не вижу никакой разницы между предыдущей картиной и предыдущими. Есть полосы прокрутки и * грузовик * выглядит нормально. Возможно, вы можете обеспечить лучший скриншот, показывающий проблему (вы можете использовать «Paint», чтобы добавить несколько стрелок или прямоугольников, чтобы показать, что не так). Несмотря на это, я помню, что были некоторые проблемы, когда я играл со слишком большим количеством гнездования, и мне пришлось использовать какой-то метод ('Refresh'?) В некотором случае (' SizeChanged'?), Чтобы принудительно выполнить ретрансляцию. – Sinatr

+0

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

+0

Это 'GroupBox', что содержит все грузовики внутри, я думаю, вы должны сделать его' AutoSize' true, а не 'Dock = Fill' для прокрутки. Может быть, вы можете включить внутри 'GroupBox' еще одну« Панель »(с' Autosize = true') и включить полосы прокрутки? – Sinatr

ответ

0

Итак, я думаю, что вложенная идея GroupBox/UserControl-GroupBox была там, где все пошло не так. Я исправил это, обновив исходную форму, чтобы сделать следующее:

pnlLorries.Controls.Clear(); 
    DateTime dt_start = monthView1.SelectionStart; 
    DateTime dt_end = monthView1.SelectionEnd; 
    int rowCounter = 0; 
    for (DateTime dt = dt_start; dt.Date <= dt_end; dt = dt.AddDays(1)) 
    { 
    Label lbl = new Label(); 
    Font ft = new System.Drawing.Font("Calibri", 12); 
    lbl.Text = dt.ToShortDateString(); 
    lbl.Font = ft; 
    pnlLorries.Controls.Add(lbl, 0, rowCounter); 
    rowCounter++; 
    FlowLayoutPanel pnl = new FlowLayoutPanel(); 
    pnl.Dock = DockStyle.Fill; 
    pnl.AutoSize = true; 
    DataTable tbl = cDALSettings.DB.GetCannedTable("select * from lorry"); 
    // Now we simply add these controls to the panel... 
    foreach (DataRow row in tbl.Rows) 
    { 
     ucLorryDay ld = new ucLorryDay(dt, cTypes.ToInt(row["id"]), this); 
     pnl.Controls.Add(ld); 
    } 
    pnlLorries.Controls.Add(pnl, 0, rowCounter); 
    rowCounter++; 
    } 

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

Смежные вопросы