代码如下 //发送表情
private void btnOK_Click(object sender, EventArgs e)
{
byte[] biStr = System.Text.Encoding.Unicode.GetBytes(rtbOut.Rtf);
string s = System.Text.Encoding.Unicode.GetString(biStr, 0, biStr.Length);
string sql = "insert rrr(Chat) values (@biStr)";
SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
comm.Parameters.AddWithValue("@biStr", s);//ms.GetBuffer()
DBHelper.conn.Open();
int num = comm.ExecuteNonQuery();
DBHelper.conn.Close();
if (num == 1)
{
trmIn.Start();
}
} //接受数据库的信息
private void trmIn_Tick(object sender, EventArgs e)
{ rtbOut.Clear();
string sql = "select Chat from rrr";
SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
DBHelper.conn.Open(); //下面是读取
SqlDataReader reader = comm.ExecuteReader();
while (reader.Read())
{
//循环插入
rtbIn.SelectionStart = rtbIn.TextLength;
rtbTemp.Rtf = reader[0].ToString();
}
reader.Close();
DBHelper.conn.Close();
trmIn.Stop();
}
private void btnOK_Click(object sender, EventArgs e)
{
byte[] biStr = System.Text.Encoding.Unicode.GetBytes(rtbOut.Rtf);
string s = System.Text.Encoding.Unicode.GetString(biStr, 0, biStr.Length);
string sql = "insert rrr(Chat) values (@biStr)";
SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
comm.Parameters.AddWithValue("@biStr", s);//ms.GetBuffer()
DBHelper.conn.Open();
int num = comm.ExecuteNonQuery();
DBHelper.conn.Close();
if (num == 1)
{
trmIn.Start();
}
} //接受数据库的信息
private void trmIn_Tick(object sender, EventArgs e)
{ rtbOut.Clear();
string sql = "select Chat from rrr";
SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
DBHelper.conn.Open(); //下面是读取
SqlDataReader reader = comm.ExecuteReader();
while (reader.Read())
{
//循环插入
rtbIn.SelectionStart = rtbIn.TextLength;
rtbTemp.Rtf = reader[0].ToString();
}
reader.Close();
DBHelper.conn.Close();
trmIn.Stop();
}
注意光标位置
private void picR_Click(object sender, EventArgs e)//点击图片黏贴到发送消息框
{
//剪切板放入数据
Clipboard.SetDataObject(picR.Image, false);
//保存剪切板数据
IDataObject data = Clipboard.GetDataObject();
//验证是否可以转换成位图
if (data.GetDataPresent(DataFormats.Bitmap))
{
//转换位图
Bitmap b = (Bitmap)data.GetData(DataFormats.Bitmap);
//设置剪切板为转换后的位图
Clipboard.SetDataObject(b);
rtbOut.Paste();
}
rtbOut.Focus();
} //发送表情
private void btnOK_Click(object sender, EventArgs e)
{
//把当前的richtextbox内容包括图片和文本保存
byte[] biStr = System.Text.Encoding.Unicode.GetBytes(rtbOut.Rtf);//SaveFile(ms, RichTextBoxStreamType.RichText);
string s = System.Text.Encoding.Unicode.GetString(biStr, 0, biStr.Length);
//保存二进制使用的参数
string sql = "insert rrr(Chat) values (@biStr)";
SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
comm.Parameters.AddWithValue("@biStr", s);//ms.GetBuffer()
DBHelper.conn.Open();
int num = comm.ExecuteNonQuery();
sql = "select @@identity from rrr";
iden = 0;
comm.CommandText = sql;
iden = Convert.ToInt16(comm.ExecuteScalar());
DBHelper.conn.Close();
if (num == 1)
{
trmIn.Start();
}
} //接受数据库的信息
private void trmIn_Tick(object sender, EventArgs e)
{ rtbOut.Clear();
string sql = string.Format("select Chat from rrr where Id = {0}", iden);
SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
DBHelper.conn.Open();
//下面是读取
rtbIn.Select(rtbIn.TextLength, 0);
rtbIn.SelectedRtf = comm.ExecuteScalar().ToString();
DBHelper.conn.Close();
trmIn.Stop();
}
不用二进制流也不是什么大问题,只是我总觉得它效率高些。我开始查看RichTextBox的方法的时候有个想法:不断地把RichTextBox上的当前内容使用Cut方法剪切到剪贴板上,然后增加新数据了,又把这些内容粘贴回来。
只是,我还没有想好,如何控制粘贴的位置。
//接受数据库的信息
private void trmIn_Tick(object sender, EventArgs e)
{
rtbOut.Clear();
string sql = "select Chat from rrr where Id <> 0";
SqlCommand comm = new SqlCommand(sql, DBHelper.conn);
DBHelper.conn.Open();
//下面是读取
byte[] b = null;
SqlDataReader reader=comm.ExecuteReader();
MemoryStream ms = new MemoryStream();
RichTextBox rchTemp=new RichTextBox();
rchTemp.Visible=false;
ms.Position = 0;//这一句实在是多余的,流的起始位置本来就在0。
while(reader.Read())
{
b = (byte[])(reader[0]);
ms.Write(b, ms.Position, b.Length);
//ms.Seek(Position,b.Length);//加这一句看看
rchTemp.LoadFile(ms,RichTextBoxStreamType.RichText);
rchTemp.SelectAll();
rchTemp.Cut();
rtbIn.Paste();//就不知道粘贴后它的插入点会不会自己移到末尾去
ms.Position = 0;
}
//ms.Position=0;//这一句也不知道要不要,可以试试去掉看看
//rtbIn.LoadFile(ms, );
ms.Close();
rchTemp.Dispose(); DBHelper.conn.Close();
trmIn.Stop();
}
我真是闲的...