2014-10-30 87 views
0

我有一個非常奇怪的情況,我似乎無法工作。我會讓你知道我有什麼,看看如果你能把我說得對。 (下面代表最接近我能達到我想要的)。TableLayoutPanel Winforms不顯示所有信息

這個想法是,當選擇一天時,我顯示一個用戶控件,該控件具有卡車在當天的交付。 事情是,日期可能是一個範圍。因此,我具有以下設置迄今:

我有一個

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

然後每個選定的具有此加入作爲行到TableLayoutPanel中的用戶控制(ucSchedulerDay)。因此,採取例如某一天,你會有這樣的:

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

所以ucSchedulerDay僅僅是擁有一個分組框的用戶控件(碼頭=填充)和FlowLayoutPanel的(也停靠=填寫組框裏面)

對於每一個卡車我有另一個用戶控件添加到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 這隻要正常工作,因爲所有的以下升(見上文),所以一天有2輛貨車(甚至在我的顯示器上最多5輛),那就沒問題。但是,如果我選擇兩天或使屏幕變小,而不是顯示滾動條,但通常具有相同的佈局,則會削減一些ucLorryDays並僅顯示其他。上述知情同意

Problem with smaller display or more items

注灰色卡車是如何切斷,甚至滾動條不那麼遠延伸。

我不明白爲什麼這不起作用。我真的很感激任何幫助,請讓我知道,如果你需要更多的信息。

+0

我個人認爲最後一張照片和以前的照片沒有任何區別。有滾動條和*卡車*看起來不錯。也許你可以提供更好的屏幕截圖顯示問題(你可以使用'畫圖'來添加一些箭頭或矩形來顯示錯誤)。儘管如此,我記得我玩過多的嵌套時遇到了一些麻煩,並且在某些情況下('RefreshChanged'?)我必須使用某種方法('Refresh'?)強制重新佈局。 – Sinatr 2014-10-30 13:15:30

+0

您可以在第二張圖片中看到滾動條位於底部,但灰色貨車的一半未顯示,灰色之後也有更多卡車沒有顯示。 – 2014-10-30 13:19:14

+0

'GroupBox'裏面的所有卡車,我認爲你必須使它的'AutoSize'爲true,而不是'Dock = Fill'來滾動。也許你可以把'GroupBox'放在另一個'Panel'(使用'Autosize = true')並啓用滾動條? – Sinatr 2014-10-30 13:26:25

回答

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++; 
    } 

因此,我創建它並添加到標籤中。不利的一面是,它並不是一個整潔的小盒子,但即使我這樣用一個groupbox來完成它,它回來的結果與我之前遇到的結果相同。我想問題是面板內的面板(初始樣式)。