ユーザーが[ユーザーの追加]ボタンをクリックすると、行ごとに追加される一連の動的に追加されたコントロールがあります。ページが読み込まれたときにラベルが表示され、ユーザーの追加ボタンがクリックされるたびに同じラベルが下に移動するようにしたい(テキストボックスの各行の下に)。今すぐロードされ、ユーザーが最初にボタンをクリックしたときに下に移動しますが、それ以降は移動します。ここに私のコードは次のとおりです。C#winforms dynimcally createdラベルの位置
グローバル変数:
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
@ CodeYoshiは、テーブルレイアウトパネルにラベルだけを置くことができますか、私はすべてのコントロールを移動する必要がありますか? – GFDSRFV
ダイナミックコントロールだけです。各コントロールの列を作成し、行と列の高さと幅を設定します(すべてデザイナを使用します)。次に、コントロールを追加または削除します。それがどのように動作するかを確認するために、ダミーフォームを作成して遊んでください。その後、それがどのように動作するかを知ったら、実際の形でそれを使用してください。 – CodingYoshi