900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > winform项目——仿QQ即时通讯程序13:添加好友及发送验证消息

winform项目——仿QQ即时通讯程序13:添加好友及发送验证消息

时间:2021-02-26 07:42:02

相关推荐

winform项目——仿QQ即时通讯程序13:添加好友及发送验证消息

上一篇文章完成了服务端程序的优化,本篇文章将实现主界面初始化以及添加好友发送验证消息操作。

回顾上一次,我们客户端程序做到登录后连接上服务器,我们接着按照程序应该有的步骤将功能依次实现。

首先,登录后,加载主界面。主界面需要初始化一些东西。

初始化用户信息

因为我们做的比较简单,用户信息只有账号、昵称和密码,所以要初始化的用户信息也就只有昵称了。

在Major主窗体加载事件中,将之前我们测试生成会话和好友列表的代码注释掉,然后写一个初始化用户数据函数:

private void Major_Load(object sender, EventArgs e)

{

CheckForIllegalCrossThreadCalls = false;

//for (int i = 0; i < 100; i++)

//{

// loadtalk(i,loadTalkMessageList());

// loadFriends(i, loadFriendList());

//}

//窗体加载时初始化

//初始化用户信息

initUserData();

}

接着写出函数体:

private void initUserData()

{

SqlDataReader sdr = SqlHelper.ExecuteReader("select * from Users where Account=" + Common.Account + "");

//加载昵称

if (sdr.Read())

{

lbl_NickName.Text = sdr[3].ToString();

}

sdr.Close();

}

很简单,利用账号查找昵称,将主界面上的昵称label的text更改就行了。

然后应该是初始化会话列表和好友列表,但是我们还没有好友,所以现在不做这两个功能。我们先来做查找好友和添加好友功能。

查找好友功能实现

我们切换到查找好友界面,只需要实现查找按钮的点击事件即可:

private void button1_Click(object sender, EventArgs e)

{

//for (int i = 0; i < 10; i++)

//{

// add_panel(list[i].Account,list[i].NickName);

//}

//先移除flowlayoutpanel上的控件

flowLayoutPanel1.Controls.Clear();

//根据账号查找用户

List

接着是loadUser方法:

private List

因为之前做界面时的add_panel方法已经做好了,调用一次就是一个查找到的结果,因此我们将查找到的结果封装到List中,方便使用。User是一个用户模型类,前面的文章已经提到。采用模糊查询,更方便找到用户。

添加按钮的点击事件

接着我们需要给查找到的用户上面的添加按钮实现点击事件。点击“+好友”按钮就应该弹出添加好友界面,但是我们需要将该用户的账号和昵称传递过去。那么怎么拿到账号呢?其实在我们的add_panel中已经有了用户的账号和昵称,我们只需要用什么东西保存它们即可。既然我们点击的是这个添加按钮,那么这里我们就采用“+好友”这个按钮的Name属性来存储该用户的账号和昵称,点击的时候只需要拿到该按钮的Name属性就拿到了用户的账号的昵称,在add_panel中的代码如下:

Button add_btn = new Button();

add_btn.Location = new System.Drawing.Point(100, 60);

add_btn.Name = account + Common.splitFlag+nickName;

add_btn.Size = new System.Drawing.Size(50, 20);

add_btn.Text = "+好友";

add_btn.UseVisualStyleBackColor = true;

add_btn.MouseClick += Add_btn_MouseClick;

可以看到它的Name属性是由账号和昵称加分隔符组成的。然后是Add_btn_MouseClick方法的实现:

private void Add_btn_MouseClick(object sender, MouseEventArgs e)

{

AddFriend af = new AddFriend();

af.Tag = ((Button)sender).Name;

af.Show();

}

这里可以看到,我们在show出添加好友窗体之前,该用户的账号、昵称通过该按钮的Name属性获得,然后赋值给了添加好友窗体的Tag属性,该属性既能赋值,又能得到值,而且该属性类型为object,用来传递信息真的太适合了,比给窗体添加静态公共字段实现传参好太多了。

我们将参数传递过去了,需要在添加好友窗体中进行处理。

添加好友功能的实现

1.首先,我们需要处理传递过来的信息

private void AddFriend_Load(object sender, EventArgs e)

{

string[] textarr = this.Tag.ToString().Split(new string[] {Common.splitFlag }, StringSplitOptions.None);

lbl_Account.Text = textarr[0];

lbl_NickName.Text = textarr[1];

}

2.其次,实现发送按钮的点击事件

private void send_btn_Click(object sender, EventArgs e)

{

string content = confirmmsg_txt.Text;

Common.sandMsg(lbl_Account.Text+ Common.splitFlag+content);

MessageBox.Show("发送成功!");

this.Close();

}

调用我们之前定义的Common类中封装的sandMsg方法即可。这里要注意,发送的消息是验证消息,上一篇文章中我们规定验证消息不带有时间,因此只需要发送账号和内容即可。因为我们还没有实现客户端接收消息功能,因此发送的验证消息只能存放在离线消息表中,我们可以在数据库中看一下有没有记录,有的话就说明我们的服务端程序是没有问题的。

其实到这里都不算太困难,因为我们前期打好了基础,服务端程序也已经完善。后面的客户端接收需要区分验证消息和普通消息,如何在界面上显示以及如何在本地存储会话列表、验证消息历时记录、聊天记录等才是难点。下一篇文章中我们将要去实现第一个难题:验证消息的接收、显示和存储。

本文系小博客网站原创,转载请注明文章链接地址

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。