문제

I want to use ListBox1.SaveToFile method in .NET, but I can't find anything equivalent to that method. I have searched on MSDN library site and I came empty handed. Is there a equivalent method in .NET?

Thanks in advance,

도움이 되었습니까?

해결책

Awesome question. You can create your own mega cool method!

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.

다른 팁

I think the most sensible solution is to serialize the listbox' contents to XML

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top