我想在 .NET 中使用 ListBox1.SaveToFile 方法,但我找不到与该方法等效的任何东西。我在 MSDN 图书馆网站上搜索过,但我空手而归。.NET 中是否有等效方法?
提前致谢,
我想在 .NET 中使用 ListBox1.SaveToFile 方法,但我找不到与该方法等效的任何东西。我在 MSDN 图书馆网站上搜索过,但我空手而归。.NET 中是否有等效方法?
提前致谢,
真棒的问题。您可以创建自己的超级酷方法!
public static class ListBoxExtensions
{
public static IEnumerable<TData> GetData<TData>(this ListBox listbox)
{
var data = new List<TData>();
foreach (var item in listbox.Items)
{
data.Add((TData) item);
}
return data;
}
public static void SetData<TData>(this ListBox listbox, IEnumerable<TData> dataToSet)
{
listbox.Items.Clear();
foreach (var item in dataToSet)
{
listbox.Items.Add(item);
}
}
}
public static class SerializerHelper
{
public static void Save<TXmlSerializableData>(IEnumerable<TXmlSerializableData> data, string outputFile)
where TXmlSerializableData : class
{
if (File.Exists(outputFile))
{
File.Delete(outputFile);
}
var serializer = new XmlSerializer(typeof (TXmlSerializableData));
using (var stream = File.OpenWrite(outputFile))
{
foreach (var item in data)
{
serializer.Serialize(stream, item);
}
}
}
public static IEnumerable<TData> Load<TData>(string inputFile)
where TData: class
{
var result = new List<TData>();
if (!File.Exists(inputFile))
{
return result;
}
var serializer = new XmlSerializer(typeof(TData));
using (var stream = File.OpenRead(inputFile))
{
TData itemToAdd;
do
{
itemToAdd = (TData) serializer.Deserialize(stream);
if (itemToAdd != null)
{
result.Add(itemToAdd);
}
} while (itemToAdd != null);
}
return result;
}
}
var data = listbox.GetData<TSerializableType>();
SerializerHelper.Save(data, "Secret file.txt");
and your type must be serializable and marked with [XmlSerializable] attribute.
我认为最明智的解决方案是将列表框的内容序列化为 XML
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx