1

以下の私のコードでは、「SelectedLines」を使用してユーザーが現在選択している行を見つけ、AllLines を使用して複数行テキスト ボックスの合計行数を見つけました。最後の for ループで i=1 の場合は正常に実行されますが、i が +1 = 2 の場合はエラーが発生します

エラー: 「インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。パラメータ名: インデックス?」

 // Retrieve selected lines
            List<string> SelectedLines = Regex.Split(txtNewURLs.SelectedText, @"\r\n").ToList();
            // Check for nothing, Regex.Split returns empty string when no text is inputted
            if (SelectedLines.Count == 1)
            {
                if (String.IsNullOrWhiteSpace(SelectedLines[0]))
                {
                    SelectedLines.Remove("");
                }
            }
            // Retrieve all lines from textbox
            List<string> AllLines = Regex.Split(txtNewURLs.Text, @"\r\n").ToList();
            // Check for nothing, Regex.Split returns empty string when no text is inputted
            if (AllLines.Count == 1)
            {
                if (String.IsNullOrWhiteSpace(AllLines[0]))
                {
                    AllLines.Remove("");
                }
            }

            string SelectedMessage = "The following lines have been selected";
            int numSelected = 0;
            // Find all selected lines
            foreach (string IndividualLine in AllLines)
            {
                if (SelectedLines.Any(a => a.Equals(IndividualLine)))
                {
                    SelectedMessage += "\nLine #" + AllLines.FindIndex(a => a.Equals(IndividualLine));
                   // changing the status of the selected lene from 0 to 1
                    AddURL objAddURL = new AddURL();
                    objAddURL.Where.SURL.Value = IndividualLine;
                    objAddURL.Where.ILicenseID.Value = CommonMethods.iLicenseID;
                    objAddURL.Query.Load();
                    if (objAddURL.RowCount > 0)
                    {
                        AddURL objaddurl1 = new AddURL();
                        objaddurl1.LoadByPrimaryKey(objAddURL.IAddURLID);
                        if (objaddurl1.RowCount > 0)
                        {
                            objaddurl1.IStatus = 1;
                            objaddurl1.Save();
                        }
                      //  AllLines.Remove(IndividualLine);
                    }
                    numSelected++;
                }
            }
            // int[] lineNo = new int[AllLines.Count];
            int linesNO = SelectedLines.Count;
            for (int i = 1; i <= linesNO; i++)
            {
                SelectedLines.RemoveAt(i);
            }

           // MessageBox.Show((numSelected > 0) ? SelectedMessage : "No lines selected.");

この問題を解決したり、新しいコードを提案したりするのを手伝ってくれる人はいますか?

4

1 に答える 1

2

C# のインデックスはゼロ ベースです。

for (int i = 0; i < linesNO; i++)
    SelectedLines.RemoveAt(i);

しかし、選択した行を textBox から削除したい場合、コードは次のようになります。

 List<string> SelectedLines = new List<string> { "b", "c" };
 textBox1.Lines = textBox1.Lines.ToList().Except(SelectedLines).ToArray();
于 2013-04-12T07:49:44.240 に答える