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

更新:如果发件人的号码在我的联系人列表中,我的列表视图中作为发件人的第一列将被名称替换。所以我无法将完整的选定行与文件中的文本进行比较,因为文件中的那一行文本将包含数字而不是名称。

请帮忙。

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 回答