2017-08-30 33 views
0

因此,我有一個表A4是一個縮放頁面,允許用戶在窗體上拖放控件進行打印。新添加的控件不會繪製到表格

IE如果控件位於窗體上,則其位置用於將控件數據(例如:文件名或圖像)打印到A4頁面的那一點。

但是我創建了一些表單的模板,用於在特定位置設置控件並添加任何缺失的控件。當選擇模板時,即使我調用Invalidate()方法,也不會在窗體上顯示任何額外的控件。

這裏是我的,增加的控件到窗體的方法代碼:

private void standardIDToolStripMenuItem_Click(object sender, EventArgs e) 
{ 

    selectedID = true; 
    selectedInvoice = false; 
    selectedLetter = false; 

    lblName.Visible = true; 
    lblDOB.Visible = true; 
    lblUID.Visible = true; 

    lblName.Location = new Point(200, 100); 
    lblDOB.Location = new Point(200, 125); 
    lblUID.Location = new Point(200, 150); 

    lblName2.Text = lblName.Text; 
    lblName2.Location = new Point(60, 750); 
    lblName2.Enabled = true; 
    lblName2.Visible = true; 


    lblDOB2.Text = lblDOB.Text; 
    lblDOB2.Location = new Point(60, 775); 
    lblDOB2.Enabled = true; 
    lblDOB2.Visible = true; 

    lblUID2.Text = lblUID.Text; 
    lblUID2.Location = new Point(60,800); 
    lblUID2.Enabled = true; 
    lblUID2.Visible = true; 

    hidden1.Location = new Point(300, 100); 
    DOBHidden.Location = new Point(300, 125); 
    UIDHidden.Location = new Point(300, 150); 

    #region ID Background placeholder 
    PictureBox backPic = new PictureBox(); 
    backPic.Location = new Point(24, 48); 
    backPic.ForeColor = System.Drawing.Color.PaleGreen; 
    backPic.Size = new Size(504, 176); 
    backPic.Visible = true; 
    backPic.Show(); 
    backPic.SendToBack(); 

    this.Invalidate(); 


    #endregion 
} 

爲什麼將新的控件不會出現在窗體上時,我已經叫Invalidate()方法,迫使它重繪?

+0

由設計人員生成的代碼正常工作,首先與設計人員生成代碼,然後將其用作自己代碼的起點。在WinForms中,默認情況下幾乎所有東西都能正確工作......正如在一個答案中所指出的那樣,您可能忘記添加控件......並如另一個答案中所建議的那樣,如果您想要執行報告,則可能需要使用報告。 – Phil1970

回答

2

看來你不要將其添加到Controls

請儘量將每個控制您指定的位置和控制初始化後剩下:

this.Controls.Add(lblName) 
+0

那就是那個。感謝Mong。 –

+0

@MacMan沒問題;) –

0

旺朱似乎如果你可以使用一些第三方庫文件(我不確定winforms是否有像DevExpress報告那樣的內容)例如

我猜測它是對的將會有助於您在項目中所做的事情。