注:WinFormではコントロールを動的に削除する問題
私はTableLayoutPanelで問題に直面しています。私はTableLauoutPanelを使ってコントロールのdynamicallを追加したり削除したりしています。私の問題は、私は中央でコントロールを削除する(すなわち、TextBox1、TextBox2、TextBox3を追加して、今度はTextBox2を削除した)場合、他のコントロールは適切なサイズに変更されません。最後のコントロール(TextBox3)が削除されると、そのサイズ変更が正しく行われます。私はここに自分のコードを添付しました。何が問題ですか?
/// HERE TBLはあなたにも動的に各コントロールのための新しいテーブル行を作成しようとしているように見えるので、あなたがFlowLayoutPanelと少し良くするかもしれないTableLayoutPanel
private void AddText_Click(object sender, EventArgs e)
{
TextBox txt = new TextBox();
txt.MouseDoubleClick += new MouseEventHandler(txt_MouseDoubleClick);
txt.Multiline = true;
txt.Dock = DockStyle.Fill; NEWADD(txt);
}
private void NEWADD(Control ctrl)
{
tbl.RowCount += 1;
tbl.RowStyles.Add(new RowStyle(SizeType.Percent, 100F/tbl.RowStyles.Count));
tbl.Controls.Add(ctrl, 0, tbl.RowStyles.Count - 1);
foreach (RowStyle row in tbl.RowStyles)
{
row.SizeType = SizeType.Percent;
row.Height = 100F/(tbl.RowStyles.Count);
}
}
private void RemoveControl(Control ctrl)
{
tbl.RowCount -= 1;
tbl.Controls.Remove(ctrl);
tbl.RowStyles.Clear();
for (int i = 0; i < tbl.Controls.Count; i++)
{
tbl.RowStyles.Add(new RowStyle(SizeType.Percent, 100F /(tbl.RowStyles.Count +1)));
}
foreach (RowStyle row in tbl.RowStyles)
{
row.SizeType = SizeType.Percent;
row.Height = 100F/(tbl.RowStyles.Count);
}
tbl.Refresh();
}
void txt_MouseDoubleClick(object sender, MouseEventArgs e)
{
RemoveControl(sender as Control);
}