2017-07-07 48 views
0

我有一堆动态添加的控件,当用户单击添加用户按钮时逐行添加。我希望在页面加载时有一个标签,并且我希望每次单击添加用户按钮时(在每行文本框下)都会向下移动相同的标签。现在它正在加载,当用户第一次点击按钮时,它会向下移动,但在它刚刚停留之后。这里是我的代码:C#winforms dynimcally创建标签位置

全局变量:

Label Savelbl = new Label();  
int LabelX = 15; 
int LabelY = 110;  
int spacelbl = 15; 

页面加载:

Savelbl.Location = new Point(LabelX, LabelY); 
Savelbl.Name = "Savelbl"; 
Savelbl.Text = "Please click 'save' to save your changes"; 
CaeUsersPanel.Controls.Add(Savelbl); 

添加用户按钮:

private void CAEAddUserbtn_Click(object sender, EventArgs e) 
    { 

     var i = UsernameTextBoxes.Count + 1; // this is a list of the added textboxes 
     ADDUserInfo(i); //method which adds the dynamically created textboxes 

     Savelbl.Location = new Point(LabelX, LabelY + spacelbl); 

    } 

删除用户按钮(标签应移回当点击时):

private void Remove_Click(object sender, EventArgs e) 
{ 
DialogResult result = MessageBox.Show("Are you sure you want delete this user? \n Deleting users may break workflows", "Delete", MessageBoxButtons.YesNo); 
      if (result == DialogResult.Yes) 
      { 

       int idx = RemoveButtons.IndexOf((Button)sender); 

       // Remove button 
       RemoveButtons[idx].Dispose(); 
       RemoveButtons.RemoveAt(idx); 

       // Remove textbox 
       UsernameTextBoxes[idx + 1].Dispose(); 
       UsernameTextBoxes.RemoveAt(idx + 1); 

       //Shift controls up 
       for (int i = idx; i < RemoveButtons.Count; i++) 
       { 
        UsernameTextBoxes[i + 1].Top -= SpaceDelta; 
       } 

       space -= SpaceDelta; 

       Savelbl.Location = new Point(LabelX, LabelY - spacelbl); 

      } 
     } 
+0

使用'TableLayoutPanel',只是添加或删除行。这是一个更好的方法。 – CodingYoshi

+0

@CodingYoshi我可以把标签放在tablelayout面板中吗?还是我必须移动所有的控件? – GFDSRFV

+0

只是动态控制。为每个控件创建一个列并设置行和列的高度和宽度(全部使用设计器)。然后只需添加或删除控件。创建一个虚拟表单并使用它来查看它是如何工作的。然后,一旦你知道它是如何工作的,以你的真实形式使用它。 – CodingYoshi

回答

1

您从不更新LabelX和LabelY。

LabelX = Savelbl.Location.X 
LabelY = Savelbl.Location.Y 
Savelbl.Location = new Point(LabelX, LabelY - spacelbl); 

你也可以摆脱可能这些变量...

+0

我不知道如何更新值 – GFDSRFV

+0

我向您展示了我的答案中的代码。用你的代码替换移动标签的代码。 – Derek