Member 10410972 Ответов: 2

Удалите один и тот же элемент в listview1 и txt.файл (в то же время) C#


Hello guys,

I wish that when I remove the selected item in listView1 that then this same item be removed in a txt.File (at the same time).
Something like the code below, but this code does not work. Please Help. Thank you.
(App, target framework: NETFramework 3.5)


Что я уже пробовал:

private void remove()
        {
            string filedata = File.ReadAllText(@"D:\Test.txt");
            string replacedata = "";
            DialogResult result = MessageBox.Show("Are you sure to delete?", "Confirm Delete", MessageBoxButtons.YesNo);

            if (result.Equals(DialogResult.Yes))
            {
                for (int i = 0; i < listView1.Items.Count; i++)
                {
                    if (listView1.Items[i].Selected)
                    {

                        replacedata = filedata.Replace(listView1.SelectedItems[0] + Environment.NewLine, "");
                        listView1.Items[i].Remove();
                        i--;
                    }
                }
                File.WriteAllText(@"D:\Test.txt", replacedata);
            }
            else if (result == DialogResult.No)
            {
                return;
            }
        }

Graeme_Grant

Не лучше ли позволить пользователю удалить один или несколько элементов, а затем, когда он будет доволен, нажать кнопку Сохранить изменения и затем экспортировать список обратно в текстовый файл? Таким образом, если пользователь совершает ошибку, он может нажать кнопку отмены или отмены, чтобы избежать потери информации навсегда....

Member 10410972

Я согласен с вами.
Но в данном случае мне нужно только то, что я вкладываю в свой вопрос. Спасибо.

[no name]

"но этот код не работает", тогда в чем проблема. Мы понятия не имеем, что значит для вас "не работает".
"Пожалуйста, помогите", с чем?

Graeme_Grant

Пожалуйста, объясните, что не работает. Если возникает ошибка, что это за ошибка, которую вы видите? На какой линии происходит ошибка?

2 Ответов

Рейтинг:
2

Valery Possoz

Привет,

Это очень простая ошибка... :) Вы не обращаетесь к текстовому свойству SelectedItem, поэтому замена не дает ожидаемых результатов.

вы должны написать:

replacedata = filedata.Replace(listView1.SelectedItems[0].Text + Environment.NewLine, "");


НЕ
replacedata = filedata.Replace(listView1.SelectedItems[0] + Environment.NewLine, "");


вот и все.

Спасибо,
Валери.


Graeme_Grant

Это было бы легко сделать, если бы была использована точка останова...

Valery Possoz

Ага! именно так...

Member 10410972

Спасибо, Валерий.
но этот код удаляет только элемент в listView1, но не удаляет тот же элемент в txt.File, и я хочу, чтобы при удалении элемента в listView1 одновременно удалялся тот же элемент в txt.File. Спасибо.

Рейтинг:
1

Graeme_Grant

Если бы мне пришлось нанести удар по этой проблеме, не видя остальной части соответствующего кода, я думаю, что вы видите ArgumentOutOfRangeException ошибка. Остальные детали ошибки будут говорить что-то вроде:

Цитата:
Дополнительная информация: InvalidArgument=значение '0' недопустимо для 'index'.


В WinForms Listview.SelectedIndexChanged событие будет срабатывать дважды при изменении выбора. Один раз сказать, что элемент не выбран, затем снова сказать, что элемент был выбран. Если вы не ищете этого, то произойдет вышеуказанная ошибка.

Без дополнительной информации я/мы не сможем вам больше помочь.