序列化的问题
我的程序有个主窗口,一个子窗口.点击主窗口则显示子窗口.在子窗口中实现图片选择,点击确定后进行序列化.子窗口有个显示按钮,点击后显示保存过的图片.在主窗口不关闭的情况下,能正常序列化,反序列化,当主窗口关闭后,再打开,在子窗口中点击显示,发现反序列化后什么结果也没得到.(保存的是图片路径).不知道为什么会这样,为什么和主窗口有关系.
程序如下:
Imports System
Imports System.IO
Imports System.Collections
Imports System.Xml.Serialization
Public Class shzh
Inherits System.Windows.Forms.Form
Public hyldPic As String
Public hyldflag As Int16
End Class
Dim mhyldlj As String
Dim hyldflag As Int16
选择图片
Private Sub shz_hyldPicBt_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles shz_hyldPicBt.Click
Dim m_opfileDlg As New OpenFileDialog
Dim jpg,bmp,gif,pic,wmf,jpeg As String 所选文件不为这些格式则告警
jpg = *.[jJ][pP][gG] 后缀为JPG或者jpg[因文件后缀不区分大小写]
bmp = *.[bB][mM][pP]
gif = *.[Gg][Ii][Ff]
pic = *.[Pp][Ii][Cc]
wmf = *.[Ww][Mm][Ff]
jpeg = *.[jJ][pP][Ee][gG]
hyldPicYl.SizeMode = PictureBoxSizeMode.StretchImage
m_opfileDlg.AddExtension = True
m_opfileDlg.Filter() = 所有文件|*.*
m_opfileDlg.CheckFileExists = True
m_opfileDlg.CheckPathExists = True
m_opfileDlg.ShowDialog()
If m_opfileDlg.FileName() Like jpg Or m_opfileDlg.FileName() Like bmp Or m_opfileDlg.FileName() Like gif Or m_opfileDlg.FileName() Like pic Or m_opfileDlg.FileName() Like wmf Or m_opfileDlg.FileName() Like jpeg Then
If m_opfileDlg.ShowDialog().OK Then
mhyldlj = m_opfileDlg.FileName()
MsgBox(mhyldlj)
hyldPicYl.Image = System.Drawing.Bitmap.FromFile(mhyldlj)
hyldPicYl.Show()
hyldflag = 2
End If
m_opfileDlg.Dispose()
Else
MsgBox( 所选文件非法! )
End If
End Sub
显示图片
Private Sub yhldCancelBt_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles yhldCancelBt.Click
Dim m_xlh_shzh As New xlh_shzh
Dim myObject As XmlSerializer
Dim mySerializer As XmlSerializer = New XmlSerializer(GetType(xlh_shzh))
Dim myFileStream As FileStream = _
New FileStream( KZS_ShZh.xml,FileMode.Open)
Dim reader As New System.XML.XmlTextReader(myFileStream)
m_xlh_shzh = CType(mySerializer.Deserialize(reader),xlh_shzh)
myFileStream.Close()
hyldPicYl.SizeMode = PictureBoxSizeMode.StretchImage
hyldPicYl.Image = Image.FromFile(m_xlh_shzh.hyldPic)
hyldPicYl.Show()
MsgBox(m_xlh_shzh.hyldPic)
End Sub
选择图片后点确定
Private Sub hyldSetBt_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles hyldSetBt.Click
Dim m_xlh_shzh As New xlh_shzh
m_xlh_shzh.hyldPic = mhyldlj
m_xlh_shzh.hyldflag = 2
Dim x As XmlSerializer = New XmlSerializer(GetType(xlh_shzh))
Dim writer As TextWriter = New StreamWriter( KZS_ShZh.xml )
x.Serialize(writer,m_xlh_shzh)
writer.Close()
End Sub
End Class
请各位大狭帮忙看看,我已经研究好几天了,也找不到原因
__________________________________________________________________________
( KZS_ShZh.xml ) 改为 ( d:/KZS_ShZh.xml ) 试试。
__________________________________________________________________________
帮顶...
__________________________________________________________________________
个人的一点愚昧的意见:
因为你的集合对象在 windows froms 数据绑定的时候产生事件,当你序列化的时候,处理事件的对象或者窗体也会被串行化(这个可能就你预想不到的后果),就回引发对象图:解决方法应该在事件添加属性标记,表明的yhldCancelB 不应该被序列化,可以声明