2013-04-25 3 views
2

런타임에 텍스트 파일을 사용하여 행으로 채워진 TableLayoutPanel이 있습니다 (텍스트 파일의 각 행을 가져 와서 새 행에 포함 된 셀에 넣음). 코드는 다음과 같습니다 : I 수동으로 소스를 편집 할 수 있도록하려면 있지만, 그래서 난 새가 만든 모든 것을 삭제할 수 있지만 그렇지 않기 때문에, 여기에 붙어있을 것 같다하는 방법을 썼다 TableLayoutPanel : 행 삭제

public static string UrlList= @"C:\Users\Berisha\Desktop\URLs.txt"; 
string[] UrlRows = System.IO.File.ReadAllLines(@UrlList); 
     private void InitPaths() 
    { 
     int a = 0; 
     int c = 1; 
     while (a < UrlRows.Length-1) 
     { 
      //new label 
      var label = new Label(); 
      label.Dock = DockStyle.Fill; 
      label.AutoSize = false; 
      label.Text = UrlRows[a]; 
      label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 
      label.Size = new System.Drawing.Size(22, 13); 
      label.BackColor = System.Drawing.Color.Transparent; 
      TBP.Controls.Add(label, 3, c); //Add to TableLayoutPanel 
      a++; 
      c++; 
     } 
    } 

작업 :

 private void clearPaths() 
    { 
     int c = UrlRows.Length - 1; 
     while (c <= UrlRows.Length - 1) 
     { 
      TBP.RowStyles.RemoveAt(c); //Remove from TableLayoutPanel 
      c--; 
     } 

    } 

// 강령 정지시 : TableLayoutPanel.RowStyles.RemoveAt (C) (디버깅하는 동안) // 에러 읽기 : "개체 참조가 개체의 인스턴스로 설정되지 않았습니다" U pdate : 나는 RemoveAt라고 말한 후에 아무 것도 제거되지 않는 것 같아서 오류에서 벗어날 수 있었다. 내가 할 수있는 일이 누구인지 아는 사람이 있습니까?

+0

좋아요, 당신은 영원히 갇혀있는 걸까요? 또는 "작동하지 않는"것은 무엇입니까? 좀 더 설명이 필요합니다. "효과가 없다"는 것은 아마도 문제를 설명 할 수있는 최악의 방법 일 것입니다. 또한,'clearPaths'와'InitPaths'에서'a'를 증가 시키지만,'InitPaths'에서만 선언 할 필요는 없습니다. 'a'가 글로벌 변수라면, 나는 그 이름을 가지고 있지 않길 바랄 뿐이지 만, 'clearPaths'에서 그것을 증가시킬 필요가없는 것처럼 보입니다. 그래도 InitPaths에'a '라는 선언과 이름 충돌이 있기 때문에 어떻게 될지 모르겠다. – tnw

+0

Accidentaly는 질문을 쓰는 동안 두 번째 방법으로 잊어 버렸다. – gbbb

답변

2

두 번째 편집을 확인하면 답을 삭제하고 새 것을 추가하려고합니다.

나는 이것이 실제로 작동하는지 의심 스럽다. while 루프는 영원히 실행됩니다.

int c = UrlRows.Length - 1; 
while (c <= UrlRows.Length - 1) //C will decrement forever and always be less than or equal 
{ 
    TBP.RowStyles.RemoveAt(c); //Remove from TableLayoutPanel 
    c--; 
} 

모든 것을 제거하려는 경우 그 방법으로 무엇을하고 싶은지 정말 몰랐습니다.

int c = 1; 
while (c <= UrlRows.Length - 1) //You now loop through all elements in TBP 
{ 
    TBP.RowStyles.RemoveAt(c); //Remove from TableLayoutPanel 
    c++; 
} 
3

나는이 문제를 하루 동안 감지하고 찾을 수 없었습니다. 나는 마침내 작동하는 해결책을 찾았습니다!

tableLayoutPanel.SuspendLayout(); 

while (tableLayoutPanel.RowCount > 1) 
{ 
    int row = tableLayoutPanel.RowCount - 1; 
    for (int i = 0; i < tableLayoutPanel.ColumnCount; i++) 
    { 
     Control c = tableLayoutPanel.GetControlFromPosition(i, row); 
     tableLayoutPanel.Controls.Remove(c); 
     c.Dispose(); 
    } 

    tableLayoutPanel.RowStyles.RemoveAt(row); 
    tableLayoutPanel.RowCount--; 
} 

tableLayoutPanel.ResumeLayout(false); 
tableLayoutPanel.PerformLayout(); 

제 해결책에서는 제 1 행을 제거하고 싶지 않습니다.

3
tableLayoutPanel1.Controls.Clear(); 
tableLayoutPanel1.RowCount = 0;