2017-07-07 55 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