2013-02-18 107 views
4

我有一个TableLayoutPanel有10行和2列。TableLayoutPanel只显示最后一行 - C#

我的问题是,当我在第一列中添加标签并在另一列中添加按钮时,一切都很好。但是当我在例如另一个标签上添加另一个标签和下一行,前面的行是空的。看来我的程序只显示最后添加的行。

代码:

Label lblProjectName = new Label(); 
lblProjectName.Text = "test"; 
lblProjectName.Anchor = AnchorStyles.Left; 
Button btnProject = new Button(); 
btnProject.Text = "Fill In"; 

tlpProject.Controls.Add(lblProjectName, 0, 0); 
tlpProject.Controls.Add(btnProject, 1, 0); 

tlpProject.Controls.Add(lblProjectName, 0, 1); 
tlpProject.Controls.Add(btnProject, 1, 1); 

TNX!

+0

请您的具体问题,更新您的头衔。 – 2013-02-18 21:13:31

+0

对不起,编辑吧:) – StevenVerheyen 2013-02-18 21:15:17

回答

1

您必须为面板中的每个单元格创建一个新的控件。

当前,您的代码是控件移动到最后一列和最后一行。

事情是这样的:

for (int i = 0; i < numRows; ++i) { 
    Button btnProject = new Button(); 
    btnProject.Text = "Fill In"; 
    tlpProject.Controls.Add(btnProject, 1, i); 
} 

任何事件处理程序将有太多在这里添加,其中在处理结束时,你必须检查对象的“发件人”看到用户按下哪个按钮。

+0

那好吧。从来没有想到这一点!谢谢 :) – StevenVerheyen 2013-02-18 21:17:31

0

看起来标签和按钮只能是儿童单一控制,而你将它们添加到不同的单元格(因此不同的控制)。如果您需要使用标签和按钮填充所有单元格,则每列需要10个标签和10个按钮。看代码:

for(int i=0;i<10;i++){ 
var lblProjectName = new Lable(); 
lblProjectName.Text = "test"; 
lblProjectName.Anchor = AnchorStyles.Left; 
var btnProject = new Button(); 
btnProject.Text = "Fill In"; 

tlpProject.Controls.Add(lblProjectName, 0, i); 
tlpProject.Controls.Add(btnProject, 1, i); 
}