存:
private void OnOkClick(int num)
{
using (MemoryStream stream = new MemoryStream())
{
this.rtxtTech.SaveFile(stream, RichTextBoxStreamType.RichText);
if (stream.Length <= 20000)
{
byte[] SendData = stream.ToArray();
OutParameter = (object)SendData;
hasModify = rtxtTech.Modified;
this.FindForm().DialogResult = DialogResult.OK;
}
else
{
MessageBox.Show("文件不能超过20K", "提示");
return;
}
}
}
stt是是个窗口,它的OutParameter就是上面传回的
if (stt.ShowDialog(stream, true) == DialogResult.OK)
{
byte[] SendData = (byte[])stt.OutParameter;
if (stt.InParameter == null)
{
string sql = @"insert into ..."
ExecuteNoneQuery(CnnStr, sql, SendData);
}
else
{
if (stt.HasModify)
{
string sql = @"update .."
ExecuteNoneQuery(CnnStr, sql, SendData);
}
}
}
}
取:
MemoryStream stream = null;
string selectSql = "select TECH from t1 where STYLENO = '" + STYLENO + "'";
DataRow dr = SQLHelper.ExecuteDataRow(CnnStr, selectSql);
byte[] selectData = null;
if (dr != null)
{
selectData = (byte[])dr["TECH"];
stream = new MemoryStream();
stream.Write(selectData, 0, selectData.Length);
}
InParameter是从数据库取出的流,即上面的stream
MemoryStream stream = (MemoryStream)InParameter;
stream.Seek(0, SeekOrigin.Begin);
this.rtxtTech.LoadFile(stream, RichTextBoxStreamType.RichText);
MemoryStream ms = new MemoryStream(bt);
richtextbox .LoadFile(ms, RichTextBoxStreamType.RichText);
问题就是你没有移动流指针 当你执行MemoryStream ms = new MemoryStream(bt); 后流指针指象你流的最后一个字节richtextbox .LoadFile(ms, RichTextBoxStreamType.RichText); 这个代码就读取不到数据修改Postion属性等于0就移动到最前边了Postion(大概是这样写)记的不是很清楚
我以前也弄过,这样不行的,你要去查RTF 文档格式介绍。有颜色的文件保存和读取是按它生产的文件内部定义来的。RTF格式介绍,搜