我有一堆動態添加的控件,當用戶單擊添加用戶按鈕時逐行添加。我希望在頁面加載時有一個標籤,並且我希望每次單擊添加用戶按鈕時(在每行文本框下)都會向下移動相同的標籤。現在它正在加載,當用戶第一次點擊按鈕時,它會向下移動,但在它剛剛停留之後。這裏是我的代碼: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);
}
}
使用'TableLayoutPanel',只是添加或刪除行。這是一個更好的方法。 – CodingYoshi
@CodingYoshi我可以把標籤放在tablelayout面板中嗎?還是我必須移動所有的控件? – GFDSRFV
只是動態控制。爲每個控件創建一個列並設置行和列的高度和寬度(全部使用設計器)。然後只需添加或刪除控件。創建一個虛擬表單並使用它來查看它是如何工作的。然後,一旦你知道它是如何工作的,以你的真實形式使用它。 – CodingYoshi