第五部分:聊天界面的设计及代码

一:效果图及界面设计

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 = ;
}

最新文章

  1. MVC KindEdit
  2. 上学时的HTML+JS+CSS(小总结)
  3. tomcat4 请求的处理——初步分析
  4. XMl各种格式转换功能代码
  5. 【Django】Django命令(Manager.py)
  6. npm获取配置,设置代理
  7. TOJ3596 二维背包
  8. 浅谈 JavaScript new 执行过程及function原理
  9. sqlserver查询数据库中有多少个表
  10. java 多线程访问同一个对象数据保护的问题
  11. Java安全管理器——SecurityManager
  12. 20175236 JAVA MyCP(课下作业)
  13. unity3d IL2CPP for android
  14. Redis进阶之redis的生命周期
  15. PHP 反射API说明
  16. angular 模板语法(官方文档摘录)
  17. FineUI4.0以后如何调用JS事件
  18. 身份证查询API
  19. css3实现jquery mobile的页面过度原理
  20. ECMA-262,第 5 版 最新 JavaScript 规范

热门文章

  1. sql 不同server間寫入數據
  2. Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞
  3. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.2.4
  4. How to change the property of a control from a flowlayoutpanel?
  5. [Stephen]自定义SimpleAdapter
  6. LoadRunner 录制IE 8卡死
  7. APMServ5.2.6 + xdebug + notepad++调试环境配置
  8. Eclipse 使用 Link 方式进行插件的安装
  9. Zookeeper系列(二)特征及应用场景
  10. 使用 AppFuse 的七个理由