[英]Strange behaviour with dynamic form in VS2010
以下代碼將產生5個相同的groupbox元素,每個元素都填充一個表單,一個按鈕和一個進度條:
private void DrawControls()
{
for(int i=0; i<5; i++)
{
// define controls
GroupBox gbxAttachmentName = new GroupBox();
gbxAttachmentName.Text = "Datei.jpg";
gbxAttachmentName.Font = new Font(gbxAttachmentName.Font, FontStyle.Bold);
TextBox tbxAttachmentLabel = new TextBox();
tbxAttachmentLabel.Text = "Bezeichnung";
tbxAttachmentLabel.Font = new Font(tbxAttachmentLabel.Font, FontStyle.Regular);
Button btnUploadAttachment = new Button();
btnUploadAttachment.Text = "übertragen";
btnUploadAttachment.Font = new Font(btnUploadAttachment.Font, FontStyle.Regular);
ProgressBar pbUploadProgress = new ProgressBar();
pbUploadProgress.Step = 1;
// position controls
gbxAttachmentName.Size = new Size(500, 75);
gbxAttachmentName.Location = new Point(10, 10 + (i * 85));
tbxAttachmentLabel.Size = new Size(375, 20);
tbxAttachmentLabel.Location = new Point(10, 20 + (i * 85));
btnUploadAttachment.Size = new Size(100, 22);
btnUploadAttachment.Location = new Point(390, 19 + (i * 85));
pbUploadProgress.Size = new Size(480, 20);
pbUploadProgress.Location = new Point(10, 45 + (i * 85));
// add controls to groupbox
gbxAttachmentName.Controls.Add(tbxAttachmentLabel);
gbxAttachmentName.Controls.Add(pbUploadProgress);
gbxAttachmentName.Controls.Add(btnUploadAttachment);
// add groupbox to form
flpMain.Controls.Add(gbxAttachmentName);
}
}
相反,我只得到1個正確填充的Groupbox。 其他4個為空。
有人對此有解決方案嗎?
提前致謝
控件實際上位於組框中,只是看不到它們。 您給他們錯誤的位置。 子控件位置相對於其父控件。 固定:
tbxAttachmentLabel.Location = new Point(10, 20);
並修復其他問題。
您可能還考慮重命名您的方法,因為它不會“繪制”控件,而是會創建它們。
您可能還會考慮使用初始化程序語法。 它不僅更簡潔,而且顯示了更好的父子關系。
更新
您可能還考慮使用錨點,以便控件可以與其父控件一起調整大小。
private static void CreateControls(Control parent)
{
int baseWidth = parent.ClientSize.Width - 20;
for (int i = 0; i < 5; i++)
{
parent.Controls.Add(
new GroupBox {
Text = "Datei.jpg",
Font = new Font(parent.Font, FontStyle.Bold),
Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right,
Size = new Size(baseWidth, 75),
MinimumSize = new Size(175, -1),
Location = new Point(10, 10 + (i * 85)),
Controls = {
new TextBox {
Text = "Bezeichnung",
Font = new Font(parent.Font, FontStyle.Regular),
Anchor = AnchorStyles.Left | AnchorStyles.Right,
Size = new Size(baseWidth - 100 - 30, 20),
Location = new Point(10, 20), },
new Button {
Text = "übertragen",
Font = new Font(parent.Font, FontStyle.Regular),
Anchor = AnchorStyles.Right,
Size = new Size(100, 22),
Location = new Point(baseWidth - 100 - 10, 19), },
new ProgressBar {
Step = 1,
Font = new Font(parent.Font, FontStyle.Regular),
Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right,
Size = new Size(baseWidth - 20, 20),
Location = new Point(10, 45) },
},
}
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.