Рейтинг:
2
Graeme_Grant
File.WriteAllText(sfd.FileName, string.Join("|", myForm.listBox.Items.OfType<string>()));
Обновление: Приведенное выше решение основано на предоставленной информации. Вы подразумеваете, что данные в списке являются простыми строками, поэтому приведенный выше код объединяет строки и записывает их на диск в виде непрерывной строки.
Если вы используете сложные объекты, такие как классы, то вам нужно сделать больше работы по сериализации объекта, прежде чем вы сможете записать его на диск.
Вот помощник [Newtonsoft] JSON для сериализации и десериализации:
using Newtonsoft.Json;
using System.Collections.Generic;
namespace DotNet.Shared.Helpers
{
public static class JsonConverter
{
public static string FromClass<T>(T data, bool isEmptyToNull = false, JsonSerializerSettings jsonSettings = null)
{
string response = string.Empty;
if (!EqualityComparer<T>.Default.Equals(data, default(T)))
response = JsonConvert.SerializeObject(data, jsonSettings);
return isEmptyToNull ? (response == "{}" ? "null" : response) : response;
}
public static T ToClass<T>(string data, JsonSerializerSettings jsonSettings = null)
{
var response = default(T);
if (!string.IsNullOrEmpty(data))
response = jsonSettings == null
? JsonConvert.DeserializeObject<T>(data)
: JsonConvert.DeserializeObject<T>(data, jsonSettings);
return response;
}
}
}
И использовать:
File.WriteAllText(sfd.FileName, JsonConverter.FromClass(listBox1.Items.OfType<Person>()));
Обновление №2: Из-за этой строки у вас всегда будут пустые файлы:
var myForm = new FormVer();
Вместо того чтобы создавать новую форму с пустыми данными, вам нужно указать на активную форму с данными. Что-то вроде:
var myForm = Application.OpenForms[nameof(FormVer)];
Member 13347457
Я попробовал это сделать, но это дает ошибку, говорит "" не может преобразовать из строки в строку []
Я думаю, что проблема заключается в "MyForm"
Потому что я сделал тест, но только я сделал все на одной и той же форме, то есть в форме 2, так как кнопка и список были на одной и той же форме, все прошло нормально и сохранилось все нормально.
Но только то, что мне нужно сделать даже с помощью кнопки на Form1 и listbox Form2, то есть мне нужно вызвать ListBox.
Я считаю, что проблема заключается в вызове списка
Но я не знаю, как решить
Graeme_Grant
Я обновил решение.
Member 13347457
Пожалуйста, я обновил свой вопрос, пожалуйста, взгляните.
Мои струны просты.
Ладно, мне очень плохо, но я попытаюсь объяснить.
Я сделал тест на той же форме ListBox, и мой код работал отлично, он работал, потому что мне не нужно было бы вызывать ListBox из другой формы, просто пока я пытался сохранить информацию, которая была на Form1 через Form2, я использовал этот файл кода". WriteAllLines (SFD. Именем, Ссылки. список. Предметы. OfType & lt;string> ());", Я теперь, как и раньше, в той же форме использовал этот "файл". WriteAllLines (SFD. Имя Файла, Список. Предметы. OfType & lt;string> ()); "
Поэтому я знаю, что ошибка при вызове списка, не работает таким образом.
Пожалуйста, если я не знаю, спросите меня еще раз, мне нужна помощь, но я не могу объяснить, мне ужасно жаль.
Graeme_Grant
Имейте прочитанный из обновления #2... Я думаю, что нашел вашу проблему...
Member 13347457
Просто продолжайте давать мне ошибку, которую я пытался разрешить, но так и не понял.
Если я поставлю эту строку кода, как вы сказали," var MyForm = Application. OpenForms [Nameof (FormVer)];", это даст ошибку в строке кода, где я вызываю ListBox, " файл. WriteAllLines (СФД".Именем, Ссылки. список. Предметы. OfType & lt;string> ());, дает точную ошибку в списке слов.
говорит, что 'form' не содержит определения для 'listbox' и в методе расширения 'ListBox' можно найти первый аргумент типа 'form'.
Что это значит?
Спасибо, что пытались мне помочь.
Graeme_Grant
Приведенный выше код скомпилирован и успешно протестирован в VS2017 & amp; .Net Framework 4.5. что вы используете?
Graeme_Grant
Я опубликовал статью о работе с JSON. Хотя я не фокусируюсь на вашей проблеме, то есть на сериализации и сохранении, она фокусируется на гораздо большем с помощью рабочего загружаемого кода, и вы можете видеть, как работает вспомогательный класс: Работа с JSON в C# и VB[^]