简单的实现QQ通信功能(五)
2024-08-27 02:13:02
第五部分:聊天界面的设计及代码
一:效果图及界面设计
1. 效果图:
2. 界面设计:
(1)左上角显示朋友的头像和“某某正在和某某聊天”。
(2)中间的聊天窗口用了一个ListView,视图用详细信息Details,设置了一列用来显示主项,只用了其中的主项(里面加载头像和需要显示的信息及消息内容),没有设置子项信息。
(3)TextBox用来写消息。
(4)一个发送的Button。
(5)界面用Dock布局。
(6)imageList1里面放用户的ico图标,imageList2放用户头像,时钟timer1来查询显示聊天消息内容。
3. 用到的各个控件的名称:
聊天内容显示窗口chatwindow,写信息文本框senderword,发送按钮btnsender
二:代码设计:
private string _Friendname; public string Friendname
{
get { return _Friendname; }
set { _Friendname = value; }
}
private string _Mename; public string Mename
{
get { return _Mename; }
set { _Mename = value; }
}
public Chat()
{
InitializeComponent();
}
//构造函数重载
public Chat(string friendname,string mename)
: this()
{
_Friendname = friendname;
_Mename = mename;
}
//加载
private void Chat_Load(object sender, EventArgs e)
{
//加载左上角的ico及显示文字
UsersTableAdapter adp = new UsersTableAdapter();
qqdata.UsersDataTable table = adp.GetDataByUsername(_Friendname);
//将取出的Image图片转为Icon格式的
Bitmap a = (Bitmap)imageList1.Images[table[].PhotoCode-];
this.Icon = System.Drawing.Icon.FromHandle(a.GetHicon()); this.Text = getmemoname(_Mename) + "正在和" + getmemoname(_Friendname) + "聊天";
}
//根据用户名获取昵称的方法
private string getmemoname(string name)
{
UsersTableAdapter adp1 = new UsersTableAdapter();
qqdata.UsersDataTable tab = new qqdata.UsersDataTable();
tab = adp1.GetDataByUsername(name); return tab[].Memo;
} //按下发送键
private void btnsender_Click(object sender, EventArgs e)
{
string nr = senderword.Text;
DateTime sj = DateTime.Now; //将自己发送的聊天内容,时间传到数据库
new ChatTableAdapter().InsertChat(_Mename,_Friendname,nr,sj,);
senderword.Text = ""; //将自己发送的内容直接显示出来,添加显示(非绑定)
qqdata.UsersDataTable tab = new UsersTableAdapter().GetDataByUsername(_Mename);
//造主项
ListViewItem item = new ListViewItem();
//设置主项信息
item.Text = getmemoname(_Mename) + sj.ToString() + "说:" + nr;
item.ImageIndex = tab[].PhotoCode - ;
chatwindow.Items.Add(item);
} //时间控件循环查
private void timer1_Tick(object sender, EventArgs e)
{
//数据库内查找此朋友发来的未读消息,添加显示出来,显示完设置已读
qqdata.ChatDataTable tab2 = new ChatTableAdapter().GetDataBySenderAndReceiver(_Friendname,_Mename,); foreach (qqdata.ChatRow row in tab2.Rows)
{
qqdata.UsersDataTable tab = new UsersTableAdapter().GetDataByUsername(row.Sender);
//造主项
ListViewItem item = new ListViewItem();
//设置主项信息
item.Text = getmemoname(row.Sender) + row.Time.ToString() + "说:" + row.Content;
item.ImageIndex = tab[].PhotoCode - ;
//标记为已读
if (row.Sender == _Friendname)
{
new ChatTableAdapter().UpdateState(, row.Ids);
} chatwindow.Items.Add(item);
} }
//窗体关闭的时候给N赋值为0,控制自定义控件头像在聊天关闭后来消息提醒
private void Chat_FormClosed(object sender, FormClosedEventArgs e)
{
Friendsmode.N = ;
}
最新文章
- MVC KindEdit
- 上学时的HTML+JS+CSS(小总结)
- tomcat4 请求的处理——初步分析
- XMl各种格式转换功能代码
- 【Django】Django命令(Manager.py)
- npm获取配置,设置代理
- TOJ3596 二维背包
- 浅谈 JavaScript new 执行过程及function原理
- sqlserver查询数据库中有多少个表
- java 多线程访问同一个对象数据保护的问题
- Java安全管理器——SecurityManager
- 20175236 JAVA MyCP(课下作业)
- unity3d IL2CPP for android
- Redis进阶之redis的生命周期
- PHP 反射API说明
- angular 模板语法(官方文档摘录)
- FineUI4.0以后如何调用JS事件
- 身份证查询API
- css3实现jquery mobile的页面过度原理
- ECMA-262,第 5 版 最新 JavaScript 规范
热门文章
- sql 不同server間寫入數據
- Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞
- [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.4
- How to change the property of a control from a flowlayoutpanel?
- [Stephen]自定义SimpleAdapter
- LoadRunner 录制IE 8卡死
- APMServ5.2.6 + xdebug + notepad++调试环境配置
- Eclipse 使用 Link 方式进行插件的安装
- Zookeeper系列(二)特征及应用场景
- 使用 AppFuse 的七个理由