3

実行時にテキスト ファイルを使用して行で埋められる 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);(デバッグ中) // そして、エラーが表示されます: 「オブジェクト参照がオブジェクトのインスタンスに設定されていません」 更新: エラーから抜け出すことができました。私の問題は、私がRemoveAtと言った後、何も削除されていないよう です私ができることを誰か知っていますか?

4

3 に答える 3

4
tableLayoutPanel1.Controls.Clear();
tableLayoutPanel1.RowCount = 0;
于 2014-11-19T07:10:19.087 に答える
4

DAYS のこの問題の解決策を Google で検索して Binged しましたが、見つかりませんでした。私はついにうまくいく解決策を見つけました!

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();

私のソリューションでは、最初の行を削除したくありません。

于 2013-10-31T21:47:05.643 に答える
2

OK、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++;
}
于 2013-04-25T14:48:24.593 に答える