我的问题很简单。我正在使用Label
控件。我在运行时创建了一个标签,然后使用PropertyInfo[]
将其所有属性保存到文本文件。
现在,我再次想在运行时使用文件中的那些设置来重新创建此标签,但是它总是使某些设置(例如字体,大小和其他设置)出错。
请与我分享一个示例代码,其中
我可以在运行时创建标签
然后将其设置保存在文本文件中
然后从该文本文件重新创建它
Label _lbl = new Label();
Type t = typeof(Label);
PropertyInfo[] propInfos = t.GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo info in propInfos)
{
//exporting settings to file
}
例如,当我导出字体属性时,它会像 “ [字体:名称= Tahoma,大小= 8.25,单位= 3,GdiCharSet = 1,GdiVerticalFont = False]”
在运行时,我使用以下代码进行设置。它给出了错误
_label.Font = (Font)Enum.Parse(typeof(Font), "[Font: Name=Tahoma, Size=8.25, Units=3, GdiCharSet=1, GdiVerticalFont=False]")
答案 0 :(得分:0)
我建议以下内容:
首先,计划要保存的属性。例如
using System;
using System.Drawing;
namespace WindowsFormsApp10
{
[Serializable]
public class LabelProperties
{
public Font Font { get; set; }
public Point Location { get; set; }
public Size Size { get; set; }
public string Text { get; set; }
}
}
现在,我们可以为Label
创建扩展方法,将这些属性保存到文件中并加载它们
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp10
{
static class LabelExtensions
{
static readonly BinaryFormatter binaryFormatter = new BinaryFormatter();
internal static void SaveProperties(this Label label, string path)
{
var properties = new LabelProperties()
{
Font = label.Font,
Location = label.Location,
Size = label.Size,
Text = label.Text
};
using (var stream = File.OpenWrite(path))
{
binaryFormatter.Serialize(stream, properties);
}
}
internal static void LoadProperties(this Label label, string path)
{
using (var stream = File.OpenRead(path))
{
var properties = binaryFormatter.Deserialize(stream) as LabelProperties;
label.Font = properties.Font;
label.Location = properties.Location;
label.Size = properties.Size;
label.Text = properties.Text;
}
}
}
}
现在我们可以将标签的属性保存到文件中,然后再将其重新加载
private void button1_Click(object sender, EventArgs e)
{
var label = new Label()
{
Font = new Font("Times New Roman", 24, FontStyle.Italic),
Location = new Point(100, 200),
Text = "Example"
};
label.Size = label.GetPreferredSize(Size.Empty);
string fileName = "label.bin";
label.SaveProperties(fileName);
var label2 = new Label();
label2.LoadProperties(fileName);
Controls.Add(label2);
}