2014-10-07 36 views
0

确定,所以我决定基于在阵列中的标签进行控制以添加到面板上的Form_Load。下面是我的代码,但无论通过按钮侦听器上传多少个文件并重新加载此表单,它只显示一个标签,仅此而已。为什么只显示一个?我添加了一个断点,并证实计数也上升到2,3,等动态添加标签仅示出一个

代码:

public partial class Attachments : Form 
    { 
     ArrayList attachmentFiles; 
     ArrayList attachmentNames; 
     public Attachments(ArrayList attachments, ArrayList attachmentFileNames) 
     { 
      InitializeComponent(); 
      attachmentFiles = attachments; 
      attachmentNames = attachmentFileNames; 
     } 

     private void Attachments_Load(object sender, EventArgs e) 
     { 
      ScrollBar vScrollBar1 = new VScrollBar(); 
      vScrollBar1.Dock = DockStyle.Right; 
      vScrollBar1.Scroll += (sender2, e2) => { pnl_Attachments.VerticalScroll.Value = vScrollBar1.Value; }; 
      pnl_Attachments.Controls.Add(vScrollBar1); 
      Label fileName; 
      for (int i = 0; i < attachmentNames.Count; i++) 
      { 
       fileName = new Label(); 
       fileName.Text = attachmentNames[i].ToString(); 
       pnl_Attachments.Controls.Add(fileName); 
      } 
     } 

     private void btn_AddAttachment_Click(object sender, EventArgs e) 
     { 
      if (openFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       string fileName = openFileDialog1.FileName; 
       attachmentFiles.Add(fileName); 
       attachmentNames.Add(Path.GetFileName(fileName)); 
       this.Close(); 
      } 
     } 
    } 

回答

1

这是因为标签都堆叠在彼此的顶部。您需要为每一个指定一个顶部或使用自动流程面板。

添加以下行创建新标签将确保所有的标签都可见后(您可能需要调整取决于您的字体乘数):

fileName.Top = (i + 1) * 22; 
0

由于competent_tech规定的标签堆叠基础但另一种方法是修改标签的位置值。对此的好处是您可以控制标签的绝对位置。

fileName.Location = new Point(x, y); 
y += marginAmount; 

x是窗体上的垂直位置,y是窗体上的水平位置。然后,所有必须修改的就是marginAmount变量中每个标签之间的空间量。

在此

所以对于循环

for (int i = 0; i < attachmentNames.Count; i++) 
{ 
    fileName = new Label(); 
    fileName.Text = attachmentNames[i].ToString(); 
    pnl_Attachments.Controls.Add(fileName); 
} 

你可以将它修改为这样:

for (int i = 0; i < attachmentNames.Count; i++) 
{ 
    fileName = new Label(); 
    fileName.Text = attachmentNames[i].ToString(); 
    fileName.Location = new Point(x, y); 
    y += marginAmount; 
    pnl_Attachments.Controls.Add(fileName); 
} 

然后,所有你需要做的就是确定X,Y和marginAmount。