0

メッセージを表示するリストビューがあります-送信者、メッセージ、時間は列です。これらのメッセージは、シリアル ポートから読み取られたデータを含むテキスト ファイルから読み取られ、後で解析され、列を含むリストビューに表示されます。各リストビュー項目には、削除する項目/メッセージを示すチェックボックスがあります。私が抱えている問題は、リストビュー項目をテキスト ファイルの内容と比較できないことです。これはコードです-

    private void btn_delete_Click(object sender, EventArgs e)
    {
        try
        {
            string filedata = File.ReadAllText("C:\\message.txt");
            string replacedata="";
            DialogResult result1 = MessageBox.Show("Are you sure to delete?", "Confirm Delete", MessageBoxButtons.YesNo);

            if (result1.Equals(DialogResult.Yes))
            {
                for (int i = 0; i < lvwMessages.Items.Count; i++)
                {
                    if (lvwMessages.Items[i].Checked)
                    {

                        replacedata = filedata.Replace(lvwMessages.SelectedItems[0] + Environment.NewLine, "");
                        lvwMessages.Items[i].Remove();
                        i--;
                    }

                }
                File.WriteAllText("C:\\message.text",replacedata);

UPDATE :送信者の番号が連絡先リストにある場合、送信者であるリストビューの最初の列は名前に置き換えられます。そのため、ファイル内のテキスト行には名前ではなく番号が含まれるため、選択した行全体をファイル内のテキストと比較することはできません。

助けてください。

4

2 に答える 2

1

File.ReadAllLines によってテキスト ファイルからすべての行を読み取ることができます。これにより、配列が得られます (http://msdn.microsoft.com/ru-ru/library/system.io.file.readalllines.aspx)。そして、次のように、そこから単一のエントリを削除できます。

List<string> lines = File.ReadAllLines("C:\\message.txt").ToList();
foreach (ListViewItem selectedItem in lvwMessages.SelectedItems)
  if (lines.Contains(selectedItem.Text))
    lines.Remove(selectedItem.Text);

リストビューで選択したアイテムがないため、例外が発生しました

于 2012-08-10T10:31:32.590 に答える
0

残りの列からデータを抽出し、その行を空にします。

                DialogResult result1 = MessageBox.Show("Are you sure to delete?", "Confirm Delete", MessageBoxButtons.YesNo);
                if (result1.Equals(DialogResult.Yes))
                {
                    string re1 = "";
                    string re2 = "";
                    string replacedata = filedata;
                    for (int i = 0; i < lvwMessages.Items.Count; i++)
                    {
                        if (lvwMessages.Items[i].Checked)
                        {
                            re1 = lvwMessages.CheckedItems[0].SubItems[1].Text;
                            re2 = lvwMessages.CheckedItems[0].SubItems[2].Text;
                            replacedata = replacedata.Replace(re1 + re2, "");
                            lvwMessages.Items[i].Remove();
                            i--;
                        }
                    }
                    StreamWriter sw = new StreamWriter("C:\\message.txt");
                    sw.Write(replacedata);
                    sw.Close();

                }
于 2012-08-14T08:49:14.243 に答える