2009-04-03 4 views
1

참고 : WinForm컨트롤을 동적으로 제거 할 때 문제가 발생했습니다.

나는 TableLayoutPanel에 문제가 있습니다. TableLauoutPanel을 사용하여 컨트롤 dynamicall을 추가 및 제거합니다. 내 문제는, 만약 내가 중간에 컨트롤을 제거하면 (즉 TextBox1, TextBox2 및 TextBox3을 추가하고 지금은 TextBox2를 제거했다) 다른 컨트롤은 properlly 크기가 조정되지 않습니다. 마지막 컨트롤 (즉, TextBox3)이 제거되면 그 크기가 적절하게 조절됩니다. 여기에 내 코드를 첨부했습니다. 문제가 무엇입니까? 당신은 또한 동적으로 각 제어를위한 새로운 테이블 행을 만들려고하는 것처럼 보이는 때문에 /// 여기 TBL

는 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); 
} 

답변

1

순간에 그것을 테스트 할 수 있지만 문제는 컨트롤에있는 행을 제거하기위한 논리 것 같습니다.

tbl.RowCount -= 1 

항상 마지막 행을 제거하는 것입니다. 컨트롤을 제거하고 한 줄 위로 올리려면 한 줄에있는 각 컨트롤을 이동해야합니다. 어쩌면 이런 건 ...

foreach(Control control in tbl.Controls) 
{ 
    if(control.Row > controlToRemove.Row) 
     control.Row--; 
} 
0

, 당신은 FlowLayoutPanel와 조금 더 잘 할 수 있습니다. 비슷한 효과를 내기 위해 스타일을 지정할 수 있어야하며 "행 만들기"를 자동으로 처리 할 수 ​​있어야합니다.

관련 문제