好的,所以我决定根据数组中的标签向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();
}
}
}
答案 0 :(得分:1)
这是因为标签全部堆叠在一起。您需要为每个指定顶部或使用自动流程面板。
创建新标签后添加以下行将确保所有标签都可见(您可能需要根据字体调整乘数):
fileName.Top = (i + 1) * 22;
答案 1 :(得分:0)
正如competent_tech所述,标签堆叠在一起,但另一种方法是修改标签的位置值。这样做的好处是可以控制标签的绝对位置。
fileName.Location = new Point(x, y);
y += marginAmount;
x是表单上的垂直位置,y是表单上的水平位置。然后,所有必须修改的是marginAmount变量中每个标签之间所需的空间量。
所以在这个for循环中
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。