[英]How to serialize and deserialize tabcontrol c#
我正在使用我要序列化并保存的tabcontrol。 我正在使用此代码,但它给出了tabcontrol类未标记为serializable的信息。 如何将其标记为可序列化,因为我无法覆盖该类。 怎么做 ?
using (Stream stream = File.Open("data.dat", FileMode.Create))
{
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(stream,tabControl1);
}
它给出了这个错误
System.Windows.Forms.TabControl未标记为可序列化
如果序列化控件,则存在一些问题:
System.Windows.Forms.TabControl
没有像您看到的那样被标记为可序列化。 如果您愿意并且仅在允许的情况下这样做,那么会从上面的类继承而来的有很多属性和类,接口,事件等被其序列化,而这并不是您想要的。
唯一的方法是创建一个新类,将所有要保存的值与属性绑定并序列化该类。
[Serializable] // don't forget this! It will mark your class so you can serialize it.
public class BindingClass // p.s.: give this a better name!
{
public string Text { get; set; } // Bind whit a control of your tab control.
public float Number { get; set; }
public string ImageLocation { get; set; } // used for the image
public IEnumerable<object> ListOfString { get; set; } // used for a list
}
文本和数字很容易。 您可以强化自己的课程,并可以与之捆绑。 之后,您可以序列化它。 一个例子:
BindingClass bc = new BindingClass();
bc.Text = textBox1.Text;
bc.Number = numbericUpDown.Value;
using (Stream stream = File.Open("data.dat", FileMode.Create))
{
BinaryFormatter bin = new BinaryFormatter();
bin.Serialize(stream, bc);
}
对于图像来说有点复杂。 您可以序列化映像,但是这样做也不是一件坏事。 更好的方法是将图像保存在项目的bin/debug
文件夹中,并序列化该图像的路径。 一个例子:
string imageLocation = Application.StartupPath + @"\myImage.jpg"
pictureBox1.Image.Save(imageLocation, ImageFormat.Jpeg);
// declare bc like code above.
bc.ImageLocation = imageLocation;
// serialize bc.
如果文件中已存在该图像,则可以覆盖它。 但是,如果您要处理历史记录,那不是一件好事...您可以通过使用当前日期时间作为文件名来解决它! 使用以下方法更改代码:
string imageLocation = Application.StartupPath +
DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"
注意:您还可以使用Azure和Amazon之类的Blob服务(并非免费),或将图像上传到Imgur , Flickr或9gag (免费) 。 请注意,客户端和服务器之间必须存在Internet连接。 您可以通过在Google上搜索如何上传来进行上传。
对于字符串列表,您可以使用以下命令:
bc.ListOfString = comboBox1.Items;
我还没有测试代码。 因此,如果您有一个问题,示例将对其进行注释,我将进行研究,但也请尝试在Google上解决您的问题。 自己尝试,这是学习的最佳方式...
序列化是一种使人们无法阅读代码的保存方法。 但是,如果扩展应用程序,可能会带来问题。 Microsoft Word也会发生此问题。 旧的.doc
文件也是序列化的代码,新的.docx
文件是压缩的xml文件,现在,制作.docx
文件更加容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.