Search code examples
.netlistboxdelphi-prismlistboxitems

Is there SaveToFile method equivalent in .NET?


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,


Solution

  • 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.