C#,请问怎么做可以向QQ聊天文本框那样,里面可以发送图片啊?
用C#做,比如像QQ那样,好友聊天窗体中的那样,可以发送图片,这个怎么做的?用的什么控件?能否给点思路!指点一下...
用C#做,比如像QQ那样,好友聊天窗体中的那样,可以发送图片,这个怎么做的?用的什么控件?能否给点思路!指点一下
展开
5个回答
展开全部
用socket
这个可以做聊天 工具 我也做了
顺便给楼主一小段代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
namespace ChatClient
{
public partial class ChatClientForm : Form
{
private TcpClient tcpClient;
private NetworkStream Strm;
private string UserAlias;
private bool privatemode = false;
public ChatClientForm()
{
InitializeComponent();
}
private void ChatClientForm_Load(object sender, EventArgs e)
{
try
{
LoginForm dlgLogin = new LoginForm();
DialogResult result = dlgLogin.ShowDialog();
if (result == DialogResult.OK)
{
UserAlias = dlgLogin.Alias;
lblAlias.Text = lblAlias + ":" + UserAlias;
tcpClient = dlgLogin.tcpClient;
//获得与服务器数据交互的流通道(NetWorkStream)
Strm = tcpClient.GetStream();
dlgLogin.Close();
}
else
{
//用户在登录窗口中单击了“取消”按钮
lstUsers.Enabled = false;
txtSendContent.ReadOnly = true;
btnSend.Enabled = false;
dlgLogin.Close();
}
//启动一个线程,执行方法this.ServerResponse(),以便来响应从服务器发回的信息
Thread thread = new Thread(new ThreadStart(this.ServerResponse));
thread.Start();
//向服务器发送“CONN”请求命令,此命令的格式与服务器端的定义格式一致,命令格式为:命令标志符(CONN)|发送者的用户名|
string cmd = "CONN|" + UserAlias + "|";
//将字符串转化为字符数组
Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(cmd.ToCharArray());
Strm.Write(outbytes, 0, outbytes.Length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void ServerResponse()
{
byte[] buff = new byte[1024];
string msg;
int len;
try
{
if (!Strm.CanRead)
return;
//用死循环来不断地与服务器进行交互,起到服务器发出“QUIT”命令,则退出循环,关闭连接,并且关闭客户端程序
while (true)
{
len = Strm.Read(buff, 0, buff.Length);
msg = System.Text.Encoding.ASCII.GetString(buff, 0, len);
msg.Trim();
string[] tokens = msg.Split(new Char[] { '|' });
if (tokens[0] == "LIST")
{
//此时从服务器返回的消息格式:命令标志符(LIST)|用户名1|用户名2|...|用户名n|
status.Items["statusLbl"].Text = "OnLine";
lstUsers.Items.Clear();
for (int i = 0; i < tokens.Length; i++)
lstUsers.Items.Add(tokens[i].Trim());
}
if (tokens[0] == "JOIN")
{
//此时从服务器返回的消息格式:命令标志符(JOIN)|刚刚登录的用户名|
lstContent.Items.Add(tokens[1] + " " + "has enter the chatroom!");
}
if (tokens[0] == "QUIT") break;
if (tokens[0] != "LIST" && tokens[0] != "JOIN" && tokens[0] != "QUIT")//如果从服务器返回其他消息格式
{
lstContent.Items.Add(msg);
}
}
//Close Connection
tcpClient.Close();
this.Close();
}
catch (Exception ex)
{
lstContent.Items.Add("网络发生错误!");
}
}
private void priCheckBox_CheckedChanged(object sender, EventArgs e)
{
if (priCheckBox.Checked)
privatemode = true;
else
privatemode = false;
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
if (!privatemode)
{
//此时消息格式:命令标志符(CHAT)|发送者的用户名:发送内容|
string message = "CHAT|" + UserAlias + ":" + txtSendContent.Text + "|";
txtSendContent.Text = "";
txtSendContent.Focus();
Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
Strm.Write(outbytes, 0, outbytes.Length);
}
else
{
if (lstUsers.SelectedIndex == -1)
{
MessageBox.Show("请在列表中选择一个用户", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
string receiver = lstUsers.SelectedItem.ToString();
//消息 的格式是:命令标志符(PRIV)|发送者的用户名|发送内容|
string message = "PRIV|" + UserAlias + "|" + receiver + "|" + txtSendContent.Text + "|";
txtSendContent.Text = "";
txtSendContent.Focus();
byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
Strm.Write(outbytes, 0, outbytes.Length);
}
}
catch (Exception ex)
{
lstContent.Items.Add("网络发生错误!");
}
}
private void btnExit_Click(object sender, EventArgs e)
{
string message = "EXIT|" + UserAlias + "|";
Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
Strm.Write(outbytes, 0, outbytes.Length);
}
}
}
这是客户端的 ~
拿分了
这个可以做聊天 工具 我也做了
顺便给楼主一小段代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Threading;
namespace ChatClient
{
public partial class ChatClientForm : Form
{
private TcpClient tcpClient;
private NetworkStream Strm;
private string UserAlias;
private bool privatemode = false;
public ChatClientForm()
{
InitializeComponent();
}
private void ChatClientForm_Load(object sender, EventArgs e)
{
try
{
LoginForm dlgLogin = new LoginForm();
DialogResult result = dlgLogin.ShowDialog();
if (result == DialogResult.OK)
{
UserAlias = dlgLogin.Alias;
lblAlias.Text = lblAlias + ":" + UserAlias;
tcpClient = dlgLogin.tcpClient;
//获得与服务器数据交互的流通道(NetWorkStream)
Strm = tcpClient.GetStream();
dlgLogin.Close();
}
else
{
//用户在登录窗口中单击了“取消”按钮
lstUsers.Enabled = false;
txtSendContent.ReadOnly = true;
btnSend.Enabled = false;
dlgLogin.Close();
}
//启动一个线程,执行方法this.ServerResponse(),以便来响应从服务器发回的信息
Thread thread = new Thread(new ThreadStart(this.ServerResponse));
thread.Start();
//向服务器发送“CONN”请求命令,此命令的格式与服务器端的定义格式一致,命令格式为:命令标志符(CONN)|发送者的用户名|
string cmd = "CONN|" + UserAlias + "|";
//将字符串转化为字符数组
Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(cmd.ToCharArray());
Strm.Write(outbytes, 0, outbytes.Length);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void ServerResponse()
{
byte[] buff = new byte[1024];
string msg;
int len;
try
{
if (!Strm.CanRead)
return;
//用死循环来不断地与服务器进行交互,起到服务器发出“QUIT”命令,则退出循环,关闭连接,并且关闭客户端程序
while (true)
{
len = Strm.Read(buff, 0, buff.Length);
msg = System.Text.Encoding.ASCII.GetString(buff, 0, len);
msg.Trim();
string[] tokens = msg.Split(new Char[] { '|' });
if (tokens[0] == "LIST")
{
//此时从服务器返回的消息格式:命令标志符(LIST)|用户名1|用户名2|...|用户名n|
status.Items["statusLbl"].Text = "OnLine";
lstUsers.Items.Clear();
for (int i = 0; i < tokens.Length; i++)
lstUsers.Items.Add(tokens[i].Trim());
}
if (tokens[0] == "JOIN")
{
//此时从服务器返回的消息格式:命令标志符(JOIN)|刚刚登录的用户名|
lstContent.Items.Add(tokens[1] + " " + "has enter the chatroom!");
}
if (tokens[0] == "QUIT") break;
if (tokens[0] != "LIST" && tokens[0] != "JOIN" && tokens[0] != "QUIT")//如果从服务器返回其他消息格式
{
lstContent.Items.Add(msg);
}
}
//Close Connection
tcpClient.Close();
this.Close();
}
catch (Exception ex)
{
lstContent.Items.Add("网络发生错误!");
}
}
private void priCheckBox_CheckedChanged(object sender, EventArgs e)
{
if (priCheckBox.Checked)
privatemode = true;
else
privatemode = false;
}
private void btnSend_Click(object sender, EventArgs e)
{
try
{
if (!privatemode)
{
//此时消息格式:命令标志符(CHAT)|发送者的用户名:发送内容|
string message = "CHAT|" + UserAlias + ":" + txtSendContent.Text + "|";
txtSendContent.Text = "";
txtSendContent.Focus();
Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
Strm.Write(outbytes, 0, outbytes.Length);
}
else
{
if (lstUsers.SelectedIndex == -1)
{
MessageBox.Show("请在列表中选择一个用户", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
string receiver = lstUsers.SelectedItem.ToString();
//消息 的格式是:命令标志符(PRIV)|发送者的用户名|发送内容|
string message = "PRIV|" + UserAlias + "|" + receiver + "|" + txtSendContent.Text + "|";
txtSendContent.Text = "";
txtSendContent.Focus();
byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
Strm.Write(outbytes, 0, outbytes.Length);
}
}
catch (Exception ex)
{
lstContent.Items.Add("网络发生错误!");
}
}
private void btnExit_Click(object sender, EventArgs e)
{
string message = "EXIT|" + UserAlias + "|";
Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(message.ToCharArray());
Strm.Write(outbytes, 0, outbytes.Length);
}
}
}
这是客户端的 ~
拿分了
展开全部
开发基于网络协议的c/s结构的通信软件,
winForm下有一个控件是richTextBox,这里可以直接显示有格式的文字和图片,
如果a是发送方,b是接收方,那么
当a发送的时候,用某种方式把图片截图截下或者用openfiledialog把图片选定,之后把richTextBox里的内容读出,把图片加入其尾部,然后重新加载richTextBox的内容,这样图片遍显示在richTextBox里了,,
发送时,,用IO里的流把richTextBox里的内容读出,然后用一些通信的东西给b方传过去,
winForm下有一个控件是richTextBox,这里可以直接显示有格式的文字和图片,
如果a是发送方,b是接收方,那么
当a发送的时候,用某种方式把图片截图截下或者用openfiledialog把图片选定,之后把richTextBox里的内容读出,把图片加入其尾部,然后重新加载richTextBox的内容,这样图片遍显示在richTextBox里了,,
发送时,,用IO里的流把richTextBox里的内容读出,然后用一些通信的东西给b方传过去,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
RichTextBox
可以重写这个组件
去csdn上搜一下LanMsg,这个程序里面就是重写的RichTextBox
可以重写这个组件
去csdn上搜一下LanMsg,这个程序里面就是重写的RichTextBox
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你直接把空间拖进去就行啦啊,然后改下它 的位置,呵呵
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
。额、、、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询